【发布时间】:2016-08-30 09:16:43
【问题描述】:
我尝试了 Internet 和 SOF,但找不到有用的资源。也许我可能没有使用正确的措辞进行搜索。如果由于这个原因我之前错过了任何问题,请告诉我,我会记下这个问题。
我正在处理一个繁忙的数据库,因此我需要向数据库发送更少的查询。
如果我从不同级别的代码访问同一 Linq 查询的不同列,那么 Entity Framework 是否足够聪明,可以预见所需的列并将它们全部带入,还是它调用数据库两次?
例如。
var query = from t1 in table_1
join t2 in table_2 on t1.col1 equals t2.col1
where t1.EmployeeId == EmployeeId
group new { t1, t2 } by t1.col2 into grouped
orderby grouped.Count() descending
select new { Column1 = grouped.Key, Column2 = grouped.Sum(g=>g.t2.col4) };
var records = query.Take(10);
// point x
var x = records.Select(a => a.Column1).ToArray();
var y = records.Select(a => a.Column2).ToArray();
EF 是否生成两次查询数据库以方便 x 和 y(首先发送查询以获取 Column1,然后发送另一个查询以获取 Column2)还是足够聪明地知道它需要实现两个列并将它们都带入在点 x?
添加以澄清问题的意图:
我知道我可以简单地在 query.Take(10) 末尾添加一个贪婪的方法并完成它,但我试图了解我尝试的方法(在我看来,更优雅)是否有效请不要让 EF 进行两次查询。
【问题讨论】:
-
不明白你在更新中的意思
-
Take(10) 将返回 10 行,而不是列
-
@SarveshMishra
Take(10)不会立即返回 10 行,它会返回一个IQueryable<T>,在最终执行查询时添加最多 10 条记录。但是,是的,它不会以任何方式更改选定的列,正确。 -
可能对您来说也很有趣可能是这个问题:stackoverflow.com/questions/32308095/… 这是一个类似的问题,您可以在其中看到如果您使用 EntityFramework 错误会出现哪些重大性能问题(例如,不要使用 @987654325 @ 或在不应该使用的地方使用
ToList()) :) -
@Menol - 编辑了我的答案。我认为它之前也解释过,但也许现在更清楚为什么它会去 DB 一次或两次?
标签: c# performance entity-framework linq