错误上的IEqualityComparer&LT; T&GT; [英] Error on IEqualityComparer<T>
问题描述
我一直在给我的问题之一,这种解决方案看起来很有趣..因为我想学习,了解LINQ ..我有这个错误,同时实施这一点。我不知道怎么回事错在这里...寻求专家的意见。
公共类CategotiesEqualityComparer:&的IEqualityComparer LT; ac_Categories&GT;
{
公共布尔等于(ac_Categories X,ac_Categories Y)
{
返回x.ThumbnailAltText.Trim()== y.ThumbnailAltText.Trim();
} 公众诠释GetHash code(ac_Categories OBJ)
{
返回obj.ThumbnailAltText.Trim()GetHash code()。
}
}VAR catlist = _db.ac_Categories
。凡(C =&GT; c.VisibilityId == 0安培;&安培;!c.ThumbnailAltText = NULL
&功放;&安培; (!c.ThumbnailAltText.StartsWith(礼物/)
&功放;&安培; !c.ThumbnailAltText.StartsWith(电子邮件/)
&功放;&安培; !c.ThumbnailAltText.StartsWith(新闻/)
&功放;&安培; !c.ThumbnailAltText.StartsWith(促销/)
&功放;&安培; !c.ThumbnailAltText.StartsWith(下称知识/)))
.Distinct(新CategotiesEqualityComparer())了ToList();
错误:LINQ到实体无法识别方法
System.Linq.IQueryable1 [WebMgr.ac_Categories]
1 [WebMgr.ac_Categories]
不同的[ac_Categories](System.Linq.IQueryable
System.Collections.Generic.IEqualityComparer`1 [WebMgr.ac_Categories])'
法,这种方法不能被翻译成店前pression
块引用>请注意:
我使用的数据库第一的方针和
ac_Categories
使用创建...解决方案您不能传递一个
的IEqualityComparer
比较器成调用的EF查询或可能最的IQueryable
集合。的IQueryable
是前pression的树木,前pression树被转换成一个基础查询(如使用EF SQL)。因此,它不能在SQL执行你的code。一个正常
鲜明的()
呼叫如果你想筛选出重复相同的记录,因为它会执行不同的一个SQL工作得很好。如果你把它以应用相等比较你就必须提取数据到内存中,然后套用您的不同。I have been given this solution in one of my question... seems very interesting.. as i am trying and learning to understand LINQ.. I am having this error while implementing this. I dont know whats going wrong here... seeking expert advice.
public class CategotiesEqualityComparer : IEqualityComparer<ac_Categories> { public bool Equals(ac_Categories x, ac_Categories y) { return x.ThumbnailAltText.Trim() == y.ThumbnailAltText.Trim(); } public int GetHashCode(ac_Categories obj) { return obj.ThumbnailAltText.Trim().GetHashCode(); } } var catlist = _db.ac_Categories .Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null && (!c.ThumbnailAltText.StartsWith("gifts/") && !c.ThumbnailAltText.StartsWith("email/") && !c.ThumbnailAltText.StartsWith("news/") && !c.ThumbnailAltText.StartsWith("promotions/") && !c.ThumbnailAltText.StartsWith("the-knowledge/"))) .Distinct(new CategotiesEqualityComparer()).ToList();
ERROR:LINQ to Entities does not recognize the method 'System.Linq.IQueryable
1[WebMgr.ac_Categories] Distinct[ac_Categories](System.Linq.IQueryable
1[WebMgr.ac_Categories], System.Collections.Generic.IEqualityComparer`1[WebMgr.ac_Categories])' method, and this method cannot be translated into a store expressionNOTE:
I am using Database first approach and
ac_Categories
is created using that...解决方案You can't pass an
IEqualityComparer
comparer into a call to an EF query or likely mostIQueryable
collections.IQueryable
are expression trees, that expression tree gets converted into an underlying query (such as SQL with EF). As such it can't execute your code in SQL.A normal
Distinct()
call will work just fine if you want to filter out duplicate identical records as it will perform a SQL distinct. If you it to apply your equality comparer you would have to pull the data into memory then apply your distinct.这篇关于错误上的IEqualityComparer&LT; T&GT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!