LINQ Except不适用于自定义实体

时间:2017-07-06 12:55:15

标签: c# entity-framework linq

我有这个__GlobalHeaderList,其中包含两个实体,现在我需要在此列表中添加更多实体,其引用与列表中已有的实体不同,可以说

HeaderEntity1.Reference = 'A'
HeaderEntity2.Reference = 'B'

现在我有这个linq查询,它从数据库中检索标题实体的记录

string[] _References = { "A", "B", "C" };


 List<HeaderEntity> _FilteredMatchedHeader = new HeaderRepository().
                     GetHeaderEntitiesByAccountID(__GlobalAccountVariable.MasterAccount.AllChildAccounts.Select(x => x.ID)).
                     Where(x => References.Contains(x.Reference)).Except(__GlobalHeaderList).ToList();

带来3个实体

HeaderEntity1.Reference = A
HeaderEntity2.Reference = B                                                       
HeaderEntity3.Reference = C

但不排除1&amp; 2,以下代码包含5个实体而不是3

__GlobalHeaderList.AddRange(_FitleredMatchedHeader);

linq查询中的逻辑select加载所有标头实体后,使用where clause应用过滤,但过滤中的except不起作用。请任何人帮忙

1 个答案:

答案 0 :(得分:2)

除了平等原则之外。对于简单的原始数据类型,因为.Net为我们完成了工作。

对于自定义复杂类型(读取类),我们需要实现该机制。一种方法是覆盖Equals方法。其他方法是创建EqualityComparer(如您所提到的那样,您的实体因修改而关闭)。

除了方法有一个overload,它进行这种比较。 SO和互联网充满了这样的例子。