var result = db.rows.Take(30).ToList().Select(a => AMethod(a));
db.rows.Take(30)是LINQ到SQL
我使用ToList()来枚举的结果,因此查询的其余部分没有翻译到SQL
这是最快的方法吗? ToArray的()?
var result = db.rows.Take(30).ToList().Select(a => AMethod(a));
db.rows.Take(30)是LINQ到SQL
我使用ToList()来枚举的结果,因此查询的其余部分没有翻译到SQL
这是最快的方法吗? ToArray的()?
var result = db.rows
.Take(30)
.AsEnumerable()
.Select(a => AMethod(a));
对于那些没有点击链接的人,所有的AsEnumerable都会返回它的参数类型IEnumerable
使用Enumerable.AsEnumerable(),如果你不想immidiatly执行数据库查询,因为,因为AsEnumerable()
仍将deffer数据库查询执行,直到你开始枚举LINQ到对象查询。
如果您确定需要数据和/或想要执行数据库查询,请使用Enumerable.ToList()或Enumerable.ToArray()。性能差异应该不大。
我假设在两次调用中,行都被读入一个可变大小的容器中,因为行数目还不知道。所以我倾向于说ToList()
可能会快一点,因为行可以直接读入列表中,而ToArray()
可能首先将行读入一种列表中,然后在所有行被传输后复制到一个数组中。
我遇到的一个有趣事实是,对于通过在投影中使用通过组联接定义的组导致相关查询,导致Linq to SQL添加另一个子查询以检索该组的计数。我假设这意味着在这些情况下,在检索项目之前将知道集合的大小,因此可以直接创建精确大小的数组,从而节省处理和内存资源,同时实现结果。 – jpierson 2010-06-28 20:03:28