私はページングされたテーブルに使用されるSQLコードにlinqをいくつか見ていました。その中では、レコードのサブセットとデータベース内のレコードの総数を返す必要があります。コードは次のようになります。Linq to sql - レコードのサブセットとレコードの総数を返す最適な方法
var query = (from p in MyTable select new {p.HostCable, p.PatchingSet});
int total = query.ToList().Count;
query = query.Skip(5).Take(10);
私はこれが実行されたときに何が起こるかにビットを掘るしたい、私は2つのクエリが起こることを確認 - 1デシベルからすべての行を取得するには、サブセットを取得する1。言うまでもありませんが、すべてのレコードを取得するパフォーマンスの影響は良くありません。私は、 "ToList"が強制的にクエリが実行され、Countメソッドがリスト全体に対して実行されると思います。より効率的にするために再ファクタリング声明で
- これが私の改良版である:これは、実際のSQLヒット、その後「.. SELECT COUNT」のためのSQLヒットをもたらし、
int total = MyTable.Count();
var query = (from p in MyTable select new {p.HostCable, p.PatchingSet}).Skip(5).Take(10);
レコードの選択。
これは最適ですか、より良い解決策がありますか?
ありがとうございます!むしろこれは、クエリを経由して、カウントを実行し、ちょうどはるかに高速である必要があり、その数を返します。そして、すべてを選択し、メモリ内のオブジェクトのカウントを行うよりも
私は同意します。これが最善の方法でしょう。カウント(*)操作は通常、(正しいインデックスを使用して)非常に高速です。 – Steven