【解決方法】EF を使用したレコード数の圧縮


問題なく動作するコード ブロックがありますが、それを見て困っています。データベース内のレコード数を取得するには、より単純な方法またはよりクリーンな方法が必要です。 約 10 件のレコード合計を含むダッシュボードを作成したいと考えています。より単純なコード アプローチがあれば、道をたどりたくありません。 どんな考えでも大歓迎です!

私が試したこと:

{
      private readonly ApplicationDbContext _context;
      public int blogCount;
      public IList<Model.Blog> Blog { get; set; };

      public IndexModel(ApplicationDbContext context)
      {
          _context = context;
      }

      public async Task OnGetAsync()
      {
          if (_context.Blog != null)
          {
              Blog = await _context.Blog
                  .ToListAsync();
              blogCount = Blog.Count();
              ViewData["BlogCount"] = blogCount.ToString();
          }

      }
  }

解決策 1

クエリは、EF に、Blog テーブルからすべてのレコードを取得するように指示しています。それらをカウントするのではありません。 それが .ToListAsync 呼び出しが行っていることです。

使用している EF のバージョンについては言及していないため、これは 1 つの可能性にすぎません。 カウントだけが必要な場合は、代わりに生の SQL クエリを実行できます。

var count = _context.Database.FromSql($"SELECT COUNT(fieldName) FROM Blog").ToList();

解決策 2

EF 6.0.10 が現在使用されているバージョンです

var count = _context.Blog.FromSqlRaw($"SELECT COUNT(bId) FROM Blog").ToList();
                ViewData["BlogCount"] = blogCount.ToString();

SSMS でクエリを実行すると、SQL は正常に動作しますが、エラーが発生します

プログラムの実行時:

見積もり:

InvalidOperationException: 必要な列 ‘BlogID’ が ‘FromSql’ 操作の結果に存在しませんでした

コメント

タイトルとURLをコピーしました