IEqualityComparer 上的错误

本文关键字:错误 IEqualityComparer | 更新日期: 2023-09-27 18:35:41

在我的一个问题中得到了这个解决方案......似乎很有趣..因为我正在尝试和学习理解 LINQ。我在实现此功能时遇到此错误。我不知道这里出了什么问题...寻求专家建议。

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();

错误:LINQ to 实体无法识别该方法 '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])' 方法,并且此方法无法转换为存储表达式

注意:

我正在使用数据库优先方法,ac_Categories是使用它创建的...

IEqualityComparer<T> 上的错误

不能将

IEqualityComparer比较器传递到 EF 查询或可能大多数IQueryable集合的调用中。 IQueryable表达式树,该表达式树将转换为基础查询(例如使用 EF 的 SQL)。 因此,它无法在 SQL 中执行您的代码。

如果要

过滤掉重复的相同记录,正常的Distinct()调用将正常工作,因为它将执行SQL不同。如果要应用相等比较器,则必须将数据拉入内存,然后应用您的区别。