0

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

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

4

2 回答 2

2

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

另请注意,在实践中,“LINQ 提供程序”通常用于简单地表示 LINQ API 的实现。尽管差异很小,但它有点类似于“参数”和“参数”如何互换使用。

于 2016-08-09T10:37:06.677 回答
2

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

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

当您对内存中的数据集合运行查询时,C# 不必将您的 linq 查询转换为其他查询。

正如@Stilgar 提到的“当源为 IQueryable 时使用提供者”。当您处理 In-Memory 数据时,您的源基本上是 IEnumerable。

于 2016-08-09T11:52:03.417 回答