2017-07-06 32 views
0

我有这个__GlobalHeaderList其中包含两个实体现在我需要更多的实体加入到这个列表,其参考是到一个不同的已经在列表中可以说LINQ除不适合自定义实体工作

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 & 2和下面的代码包含5个实体代替3-

__GlobalHeaderList.AddRange(_FitleredMatchedHeader); 

该滤波之后的所有标头实体在过滤使用where clauseexcept应用于linq查询高达select加载逻辑不管用。请任何人帮忙

+0

'HeaderEntity'中是否有任何等价机制来查明两个对象是否相同或不是两个不同的引用? –

+0

@NikhilAgrawal .no – 3355307

+0

然后你需要。 –

回答

2

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

对于自定义复杂类型(读取类),我们需要实现该机制。一种方法是覆盖Equals方法。其他方法是创建一个EqualityComparer(如您所述,您的实体已关闭以进行修改)。

除了方法有overload这种比较类型。因此,互联网充满了这样的例子。