2016-03-21 5 views
-2
IQuerable x=db.Customers; 
int sum1=x.where(c=>someCondtion).Sum(s=>s.Amount); 
int sum2=x.where(c=>someCondtion).Sum(s=>s.Amount); 

ここで私の質問は、合計操作がサーバー側またはクライアント側で実行されるということですか?Entity Frameworkクエリのベストプラクティスは?

OR

int sum1=db.Customers.where(c=>someCondtion).Sum(s=>s.Amount); 
int sum2=db.Customers(c=>someCondtion).Sum(s=>s.Amount); 

どんな答えをしてください?

+0

最後に1つもコンパイルされますか? –

+0

一意のIDでフィルタリングしたときに合計を使用する理由は何ですか? – kai

+0

@teovankotそれらのどれもコンパイルされていないので、C#は大文字と小文字を区別するので、 'where'は動作しません。最後のものはどちらもうまくいかないでしょう。 – kai

答えて

4

私はあなたがこれらの2が100%に相当している

var result = db.SomeTable.Where(Predicate); 

var table = db.SomeTable; 
var result = table.Where(Predicate); 

間があると思います正確にどのような違いはわかりません。

誰かが具体的な結果を見るように頼まれていなければならないまで、クエリが実行されないことを考慮する必要があります。 Whereは何もしません。しかしながら、Sumはそうです。これは、EFが何らかのSQLを生成して実行することを意味します。これはDB上で実行されます(技術的にはプロバイダIQueryableに依存します)。

基本的に、クエリの結果が別のIQueryableである場合、LINQ2Entitiesはおそらくそれについて怠惰です。結果がプリミティブである場合、またはこの方法で読み込まれたエンティティのプロパティを実際に読み取った場合、クエリが実行されます。

関連する問題