.Net中的LINQ Where()子句如何工作?

时间:2014-05-01 13:28:19

标签: c# .net linq search where

我想知道如何实现LINQ Where()。它是否对集合执行简单的线性搜索?或者是否实施了任何优化?

3 个答案:

答案 0 :(得分:4)

简短回答:取决于。

更长的答案:LINQ的目的是允许开发人员表达查询的 intent ,而无需提供 将如何执行查询。我们可以对几乎任何可以表示为集合的内容使用相同的查询语法。

对于LINQ to Objects,它目前只是执行您所描述的 - 序列的线性遍历。 LINQ可以使用IQueryProvider如何推迟到更复杂的实现。

提供者的工作是将查询(例如,Where(predicate))转换为实际执行代码。对于像实体框架中的LINQ to SQL或LINQ to Entities之类的东西,它将查询转换为SQL并执行它。

所以在基本层面上,这个想法是“它无关紧要”它是如何工作的 - 它应该通过更具说明性地编写查询来帮助开发人员提高工作效率。但查找您正在使用的特定LINQ提供程序的文档很有帮助,因此您可以了解如何最有效地利用它。

答案 1 :(得分:2)

正如MSDN documentation所说:

  

LINQ为查询和引入了标准的,易于学习的模式   更新数据,和技术可以扩展到支持   可能是任何类型的数据存储

因此,Where函数的工作原理取决于集合下使用的LINQ提供程序。 LINQ to对象将执行类似于您所说的搜索,而LINQ to Entities将把它转换为SQL WHERE子句并在数据库上执行它以返回对象。

答案 2 :(得分:2)

它只是迭代:

foreach (TSource element in source) { 
  if (predicate(element)) yield return element; 
}