我遇到了两个名单的情况。比较两者并在第三个列表中得到结果的正确方法是什么。但这是一个小问题。见下面的例子:
ListOld = {
[Name=Amit, Class=V, Roll=3],
[Name=Naveen, Class=V, Roll=3],
[Name=Sammy, Class=V, Roll=3],
[Name=Neil, Class=X, Roll=21],
[Name=John, Class=VI, Roll=63]};
ListNew = {
[Name=Amit, Class=VI, Roll=13],
[Name=Naveen, Class=VII, Roll=3],
[Name=Sammy, Class=V, Roll=3],
[Name=Sanjay, Class=VIII, Roll=2]};
ResultantList = {
[Name=Amit, Class=VI, Roll=13],
[Name=Naveen, Class=VII, Roll=3],
[Name=Sanjay, Class=VIII, Roll=2]};
在上面的示例中,ListNew有3个更改,即Amit和Naveen中的更新,以及Sanjay作为新成员的更新。
所以在我的查询中,我需要比较列表并想要在第一个列表中选择更新或添加的项目。
我尝试过,Except(),Intersect(),union()和Equality Interfaces但没有成功。请帮助。
答案 0 :(得分:2)
您可以写IEqualityComparer
public class SomeClassComparer : IEqualityComparer<SomeClass>
{
public bool Equals(SomeClass x, SomeClass y)
{
return x.Name == y.Name && x.Class == y.Class && x.Roll == y.Roll;
}
public int GetHashCode(SomeClass obj)
{
return (obj.Name + obj.Class).GetHashCode();
}
}
现在,linq很简单
var result = ListNew.Except(ListOld , new SomeClassComparer()).ToList();
你也可以通过覆盖ToString
和GetHashcode
方法来做同样的事情,但IEqualityComparer
是好的,特别是当你无法控制你使用的类时。