IQuerable x=db.Customers;
int sum1=x.where(c=>someCondtion).Sum(s=>s.Amount);
int sum2=x.where(c=>someCondtion).Sum(s=>s.Amount);
我的问题是,sum操作将在服务器端还是客户端执行?
OR
int sum1=db.Customers.where(c=>someCondtion).Sum(s=>s.Amount);
int sum2=db.Customers(c=>someCondtion).Sum(s=>s.Amount);
请回答任何问题?
答案 0 :(得分:4)
我不确定你认为
之间有什么区别var table = db.SomeTable;
var result = table.Where(Predicate);
和
var result = db.SomeTable.Where(Predicate);
这两个是100%等效的。
要考虑的一件事是,除非有人要求查看具体结果,否则不会执行任何查询。 Where
什么也没做。但是,Sum
确实如此。这意味着EF将生成一些SQL并执行它。它将在DB上运行(从技术上讲,这取决于IQueryable
提供程序。)
基本上,如果查询的结果是另一个IQueryable
,LINQ2Entities可能会对它很懒惰。如果结果是某些原语,或者您实际读取了以这种方式加载的实体的某些属性,则查询将执行。