它的LINQ-to- object是一个LINQ提供者



我有一些困惑,在LINQ到对象中,我们在内存数据中执行LINQ查询,这是由c#语言处理的。

当我写一个基于内存数据执行的Linq查询时,为什么我们使用提供者(Linq到对象)?

不,Linq to Object不是提供者,它不需要依赖任何其他中间提供者来运行查询(Linq to Object)。

为了更清楚地理解它,我们必须理解提供者实际上是什么。Provider基本上是实现IQueryProviderIQueryable接口的实现,这主要是将你的linq查询转换为SOMETHING,你的提供者可以理解。例如,当你执行LINQ to SQL查询时,你的查询被转换/翻译成SQL,它被转换成SQL,因为你的提供者(在这种情况下)只理解SQL。

当你对内存中的数据集合运行查询时,c#不需要将你的linq查询转换为其他查询。

正如@Stilgar提到的"当源是可查询的时,使用提供程序"。当您处理内存中的数据时,您的源基本上是IEnumerable。

LINQ to Objects不是LINQ提供程序。它是IEnumerable上的LINQ API的实现。LINQ API实际上可以在任何类型上实现,只要你正确地命名你的方法并接受正确的参数。也就是说,与LINQ到对象相关的东西非常接近于LINQ提供程序。当源是可查询的并且编译器生成一个表达式树时,才会使用提供程序。表达式树可以编译为委托,因此Compile方法的作用非常类似于LINQ提供程序。

还要注意,在实践中,"LINQ提供程序"经常被用来表示LINQ API的实现。这有点类似于"argument"one_answers"parameter"是如何互换使用的,尽管有很小的区别。

相关内容

  • 没有找到相关文章

最新更新