实现LINQ提供程序

本文关键字:程序 LINQ 实现 | 更新日期: 2023-09-27 18:17:28

我目前正在为我自己的教育目的实现一个LINQ提供程序。我最近已经设法让Count()扩展工作,到目前为止一切顺利。

现在我的问题不是呼救,而只是请求一些澄清。

为了创建提供程序,需要实现两个接口:IQueryProvider和类似IOrderedQueryable<>的接口。MSDN明确了如何实现它们,但有一点仍然让我感到困惑。

为什么这些接口由单独的类实现,即使每个IOrderedQueryable实例引用自己的IQueryProvider实例,两个对象实际上(间接)引用相同的数据?

他们真的需要分开吗?

。我能够像这样组合它们:class Source<RowContract> : IQueryProvider, IOrderedQueryable<RowContract> -以简化类型信息访问。这种实现现在可以正常工作,看起来比"分离类"方法更简单、更清晰。

我想知道我的组合实现是否有缺陷。或者,它是有效的?

实现LINQ提供程序

正如在msdn上提到的,IQueryProvider专注于创建和执行查询。而IQueryable是被查询的东西。把它们放在一起可能会把类似的代码放在一起,但它最终没有尊重关注点分离。