我正在尝试在使用Linq生成的查询上使用自定义比较器。我看过很多文章说你不能这样做,但是当我看到Distinct扩展方法的签名时,我看到:(这个IQueryable源,IEqualityComparer比较器)..
为什么有一个构造函数接受自定义比较器,如果它不能通过Linq转换为sql?
提前致谢。
答案 0 :(得分:1)
原因是linq不仅仅是linq到sql,linq到实体或其他任何东西。
使用可查询时,您始终拥有提供程序。提供者不需要支持linq可以执行的所有操作。这是一个这样的例子。
之所以存在,是因为不同的提供商可能会选择支持一组不同的功能,例如自定义比较器。
一般来说,我相信IEnumerable
通过LINQ可以对IQueryable
完成所有工作。
我同意这个可能是更难转换为提供商链接的内容之一,但Enumerable
和Queryable
之间的对称性以及某人可能的事实我怀疑它们存在的原因。