0

我在我的一个问题中得到了这个解决方案......看起来很有趣......因为我正在尝试和学习理解 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 Entities 无法识别方法 'System.Linq.IQueryable 1[WebMgr.ac_Categories] Distinct[ac_Categories](System.Linq.IQueryable1[WebMgr.ac_Categories], System.Collections.Generic.IEqualityComparer`1[WebMgr.ac_Categories])' 方法,并且此方法无法转换为商店表达

笔记:

我正在使用数据库优先方法,并ac_Categories使用该方法创建...

4

1 回答 1

4

您不能将IEqualityComparer比较器传递给对 EF 查询或可能大多数IQueryable集合的调用。IQueryable是表达式树,该表达式树被转换为底层查询(例如带有 EF 的 SQL)。因此,它无法在 SQL 中执行您的代码。

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

于 2013-10-17T10:47:20.687 回答