我不知道我怎么能做几个不同的工会。
当我将.Distinct与IEqualityComparer一起使用时,抛出的异常:
LINQ实体不识别方法“System.Linq.IQueryable”
我的代码是
var union = query.Union(query1).Union(query2);
union = union.Distinct(new EqualityComparerTransaction());发布于 2010-02-19 15:23:37
LINQ不支持Distinct的过载,这需要一个IEqualityComparer。当您考虑它时,它确实不能,因为查询将被转换为SQL,并且不能将接口引用转换为SQL。
因此,你必须:
Distinct重载,或者Distinct,如下所示:var union = query.Union(query1).Union(query2);.Union=union.AsEnumerable().Distinct(新的query2)
当然,这里的风险是您可能会从DB服务器带回太多的记录。您还可以使用这两种技术在服务器上进行部分比较,并在对象空间中进行另一部分比较。
发布于 2012-04-15 09:38:03
问题得到了回答,但我只想分享我的经验。
不确定,但我认为错误消息与说不同的方法是一致的,我认为这个论点不支持。
实际上,我们只想要Linq到SQL,这是一个可查询的表达式,它表示如果这个属性相同,就会得到其中的一个。
但是当我们使用像EqualityComparerTransaction这样的类时,它通常不能被转换成sql。
还有另一个方法GetDistict (string propertyName),但遗憾的是,它没有像我们预期的那样工作。此方法还会转到DB(我们的源还有什么),并获得一些数据并计算不同的值。
如果GetDistinct(string propertyName)扩展方法执行sql转换操作,则可能是。但没有办法。
可悲的是,这样做的唯一方法是为LINQ_TO_SQL.I编写您自己独特的扩展程序--不要认为这会很容易!因此,服务器端的Enumarating数据目前看来是最简单的。
https://stackoverflow.com/questions/2296966
复制相似问题