LINQ-to-Object是LINQ提供者吗?

时间:2016-08-09 10:27:15

标签: linq linq-to-objects linq-query-syntax

我有一些困惑,在Linq-to-Object中,我们使用内存数据来执行由c#语言处理的LINQ查询。

当我编写基于内存数据执行的Linq查询时,为什么我们使用提供程序(LINQ-to-Object)?

2 个答案:

答案 0 :(得分:2)

LINQ to Objects不是LINQ提供程序。它是IEnumerable上LINQ API的一个实现。 LINQ API几乎可以在任何类型上实现,只要您正确命名方法并接受正确的参数即可。话虽如此,有一些与LINQ to Objects相关的LINQ提供程序非常接近。当源为IQueryable并且编译器生成表达式树时,将使用提供程序。表达式树可以编译为委托,因此Compile方法的作用与LINQ提供程序非常相似。

另请注意,在实践中" LINQ Provider"通常用于表示LINQ API的实现。它有点类似于"论证"和"参数"虽然差别很小,但可互换使用。

答案 1 :(得分:2)

不, Linq to Object 不是PROVIDER,它不必在任何其他中间提供程序上中继运行查询(linq to object)。

为了更清楚地理解它,我们必须了解提供者实际上是什么。 Provider基本上是实现 IQueryProvider IQueryable 接口的实现,这主要是将您的linq查询转换为您的提供者理解的 SOMETHING 。例如,当您转到 LINQ to SQL 查询转换/转换为SQL的查询时,它会被转换为SQL,因为您的提供程序(在本例中)只能理解SQL。

当您针对In-Memory数据集合运行查询时,C#不必将您的linq查询转换为其他查询。

由于@Stilgar提到“提供者在源是IQueryable时使用”。当您使用In-Memory数据时,您的源基本上是IEnumerable。