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
比较器传递到 EF 查询或可能大多数IQueryable
集合的调用中。 IQueryable
表达式树,该表达式树将转换为基础查询(例如使用 EF 的 SQL)。 因此,它无法在 SQL 中执行您的代码。
过滤掉重复的相同记录,正常的Distinct()
调用将正常工作,因为它将执行SQL不同。如果要应用相等比较器,则必须将数据拉入内存,然后应用您的区别。