错误上的IEqualityComparer< T> [英] Error on IEqualityComparer<T>

查看:143
本文介绍了错误上的IEqualityComparer< T>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在给我的问题之一,这种解决方案看起来很有趣..因为我想学习,了解LINQ ..我有这个错误,同时实施这一点。我不知道怎么回事错在这里...寻求专家的意见。

 公共类CategotiesEqualityComparer:&的IEqualityComparer LT; ac_Categories>
{
    公共布尔等于(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 => 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.IQueryable 1 [WebMgr.ac_Categories]
  不同的[ac_Categories](System.Linq.IQueryable
1 [WebMgr.ac_Categories]
  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.IQueryable1[WebMgr.ac_Categories] Distinct[ac_Categories](System.Linq.IQueryable1[WebMgr.ac_Categories], System.Collections.Generic.IEqualityComparer`1[WebMgr.ac_Categories])' method, and this method cannot be translated into a store expression

NOTE:

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 most IQueryable 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆