实体框架查询中的哪种最佳实践?

时间:2016-03-21 07:26:18

标签: c# asp.net-mvc entity-framework linq

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);

请回答任何问题?

1 个答案:

答案 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可能会对它很懒惰。如果结果是某些原语,或者您实际读取了以这种方式加载的实体的某些属性,则查询将执行。