我有一个实体,想要将其与子集进行比较,并确定选择除子集之外的所有内容。
因此,我的查询如下所示:
Products.Except(ProductsToRemove(), new ProductComparer())
ProductsToRemove()
方法执行几个任务后,返回一个 List<Product>
。所以在最简单的形式中,代码如上所示。
ProductComparer()
类如下:
public class ProductComparer : IEqualityComparer<Product>
{
public bool Equals(Product a, Product b)
{
if (ReferenceEquals(a, b)) return true;
if (ReferenceEquals(a, null) || ReferenceEquals(b, null))
return false;
return a.Id == b.Id;
}
public int GetHashCode(Product product)
{
if (ReferenceEquals(product, null)) return 0;
var hashProductId = product.Id.GetHashCode();
return hashProductId;
}
}
然而,我不断收到以下异常:
请注意,本文中的 html 标签已保留。LINQ to Entities 不认识方法 'System.Linq.IQueryable
1[UnitedOne.Data.Sql.Product] Except[Product](System.Linq.IQueryable
1[UnitedOne.Data.Sql.Product], System.Collections.Generic.IEnumerable1[UnitedOne.Data.Sql.Product], System.Collections.Generic.IEqualityComparer
1[UnitedOne.Data.Sql.Product])',这个方法无法转换成存储表达式。
AsEnumerable
代替ToArray
,它也会在内存中执行,但在开始处理之前不需要将所有内容从数据库加载到内存中。 这可能会产生巨大的差异。 - Tim Schmelter