【发布时间】:2012-12-11 19:22:33
【问题描述】:
我正在寻找这些 LINQ 表达式的确认/澄清:
var context = new SomeCustomDbContext()
// LINQ to Entities?
var items = context.CustomItems.OrderBy(i => i.Property).ToList();
// LINQ to Objects?
var items2 = context.CustomItems.ToList().OrderBy(i => i.Property);
-
我认为第一种方法是
LINQ to Entities是否正确,其中 EF 构建了一个更具体的 SQL 语句以传递,将排序工作放在数据库上? -
第二种方法
LINQ to Objects是不是 LINQ 在排序之前将整个集合拖到内存中(ToList()枚举?),从而将负担留给服务器端(本例中为 Web 服务器)?如果是这种情况,我可以很快看到 L2E 有利的情况(例如,在将集合拉入内存之前过滤/修剪集合)。
-
但是我是否应该注意其他任何细节/权衡,或者“方法 2”可能优于第一种方法的时间?
更新:
假设我们没有使用EntityFramework,只要底层存储库/数据源实现IQueryable<T>,这仍然是正确的?如果这两个语句都不会导致内存中的LINQ to Objects 操作?
【问题讨论】:
标签: performance linq entity-framework linq-to-entities