我有这个__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
不起作用。请任何人帮忙
答案 0 :(得分:2)
除了平等原则之外。对于简单的原始数据类型,因为.Net为我们完成了工作。
对于自定义复杂类型(读取类),我们需要实现该机制。一种方法是覆盖Equals
方法。其他方法是创建EqualityComparer
(如您所提到的那样,您的实体因修改而关闭)。
除了方法有一个overload,它进行这种比较。 SO和互联网充满了这样的例子。