首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对实体的Linq : Unions + Distinct

对实体的Linq : Unions + Distinct
EN

Stack Overflow用户
提问于 2010-02-19 14:29:13
回答 2查看 14.8K关注 0票数 10

我不知道我怎么能做几个不同的工会。

当我将.Distinct与IEqualityComparer一起使用时,抛出的异常:

LINQ实体不识别方法“System.Linq.IQueryable”

我的代码是

代码语言:javascript
复制
var union = query.Union(query1).Union(query2);
union = union.Distinct(new EqualityComparerTransaction());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-19 15:23:37

LINQ不支持Distinct的过载,这需要一个IEqualityComparer。当您考虑它时,它确实不能,因为查询将被转换为SQL,并且不能将接口引用转换为SQL。

因此,你必须:

  1. 使用不进行任何比较的Distinct重载,或者
  2. 将两个列表都引入对象空间,并在LINQ对象中执行Distinct,如下所示:

var union = query.Union(query1).Union(query2);.Union=union.AsEnumerable().Distinct(新的query2)

当然,这里的风险是您可能会从DB服务器带回太多的记录。您还可以使用这两种技术在服务器上进行部分比较,并在对象空间中进行另一部分比较。

票数 9
EN

Stack Overflow用户

发布于 2012-04-15 09:38:03

问题得到了回答,但我只想分享我的经验。

不确定,但我认为错误消息与说不同的方法是一致的,我认为这个论点不支持。

实际上,我们只想要Linq到SQL,这是一个可查询的表达式,它表示如果这个属性相同,就会得到其中的一个。

但是当我们使用像EqualityComparerTransaction这样的类时,它通常不能被转换成sql。

还有另一个方法GetDistict (string propertyName),但遗憾的是,它没有像我们预期的那样工作。此方法还会转到DB(我们的源还有什么),并获得一些数据并计算不同的值。

如果GetDistinct(string propertyName)扩展方法执行sql转换操作,则可能是。但没有办法。

可悲的是,这样做的唯一方法是为LINQ_TO_SQL.I编写您自己独特的扩展程序--不要认为这会很容易!因此,服务器端的Enumarating数据目前看来是最简单的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2296966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档