使用LINQ枚举的正确方法是什么?

时间:2009-07-08 18:05:04

标签: c# .net linq

代码:

 var result = db.rows.Take(30).ToList().Select(a => AMethod(a));

db.rows.Take(30)是Linq-To-SQL

我使用ToList()来枚举结果,因此查询的其余部分未转换为SQL

哪种方法最快? ToArray的()?

2 个答案:

答案 0 :(得分:14)

使用Enumerable.AsEnumerable

var result = db.rows
               .Take(30)
               .AsEnumerable()
               .Select(a => AMethod(a));

答案 1 :(得分:2)

如果您不想免费执行数据库查询,请使用Enumerable.AsEnumerable()因为AsEnumerable()仍然会在执行LINQ to Object查询之前执行数据库查询执行。

如果您确定需要数据和/或想要无线执行数据库查询,请使用Enumerable.ToList()Enumerable.ToArray()。性能差异应该不大。

我假设在两个调用中,行首先被读入一个可变大小的容器,因为行数尚不可知。所以我倾向于说ToList()可能会更快一些,因为行可以直接读入列表,而ToArray()可能首先将行读入一种列表然后复制到数组在所有行都被转移之后。