【发布时间】:2014-04-25 17:50:36
【问题描述】:
我正在尝试对使用 Linq 生成的查询使用自定义比较器。我看过很多文章说你不能这样做,但是当我查看 Distinct 扩展方法的签名时,我看到了这个:(这个 IQueryable 源,IEqualityComparer 比较器)..
如果不能通过Linq转换成sql,为什么会有一个构造函数接受自定义比较器?
提前致谢。
【问题讨论】:
我正在尝试对使用 Linq 生成的查询使用自定义比较器。我看过很多文章说你不能这样做,但是当我查看 Distinct 扩展方法的签名时,我看到了这个:(这个 IQueryable 源,IEqualityComparer 比较器)..
如果不能通过Linq转换成sql,为什么会有一个构造函数接受自定义比较器?
提前致谢。
【问题讨论】:
原因是 linq 不仅仅是 linq to sql、linq to entity 或其他任何东西。
当使用 queryable 时,你总是有一个提供者。提供者不需要支持 linq 可以做的所有事情。这就是一个例子。
之所以存在,是因为不同的提供者可能会选择支持不同的功能集,例如自定义比较器。
总的来说,我相信可以通过 LINQ 对 IEnumerable 进行的所有操作都可以对 IQueryable 进行。
我同意,这可能会成为更难翻译的内容之一,无论您的提供商链接到什么,但 Enumerable 和 Queryable 之间的对称性以及某人可能我怀疑它们存在的原因吗?
【讨论】: