4

次の非常に単純な linq ステートメントがあるとします。

vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified);

また

vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified == true);

bool はどこVerifiedですか? これは linq-2-entities でサポートされていないという例外が発生しますか?

非常に単純なものを見逃しています - または、次のいずれかを選択する必要があります。

a)
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();

また

b)
vm.VerifiedGroups = db.ReportGroups.ToList().Count(g => g.Verified);

これらはどちらも機能します (私のリストは 30 ~ 50 の長さしかないので、ToList は問題になりません)。

4

2 に答える 2

7

あなたは何も見逃していません。述語を使用したカウントは、Linq to Entitities ではサポートされていません。msdn の記事「サポートされているおよびサポートされていない LINQ メソッド (LINQ to Entities) 」を参照してください。

ToList()はい、クエリを実行し、すべてのエンティティをメモリに取り込むため、最初のオプションを使用する必要があります。

vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();

テーブルに多くのレコードがなくてもReportGroups、処理が遅く、より多くの PC、データベース、およびネットワーク リソースを使用するのはなぜでしょうか? 1 つの整数値の転送と、50 個のReportGroupエンティティのすべてのフィールドの転送、.net オブジェクトの作成DataReader(および接続を開いたままにする)、作成されたリストの反復処理、各DataReaderエンティティで述語メソッドの実行を比較してください。ここでは、整数値を 1 つ転送することが勝つと思います。

于 2013-01-15T10:09:15.477 に答える
3

最初はカウントを計算するためのすべてのレコードを取得しないため、最初のオプションを選択します。2 番目のオプションToListメソッドでは、データを取得し、それにカウントを適用します。

vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();
于 2013-01-15T10:06:09.440 に答える