2015-08-31 56 views
1

我被困在有两个列表的情况下。什么是正确的方式来比较两者,并得到第三名单的结果。但这是一个小问题。见下面的例子:如何比较两个列表并从第一个列表中获取差异?

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个变化,即在阿米特和纳文,并更新桑杰作为一个新成员。

所以在我的查询中,我需要比较这两个列表,并希望选择第一个列表中的更新或添加项目。

我试过了,除了(),Intersect(),union()和Equality Interfaces但没有成功。请帮助。

回答

3

您可以通过编写一个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(); 

您还可以通过overiding ToStringGetHashcode方法做同样的事情,但IEqualityComparer好特别是当你无法控制你使用的课程时。

+0

谢谢,但同样我试过了,它没有奏效。 AFAIK平等比较接口只有在我们有类似的情况下才能使用。但在这里我的情况。我需要找出差异并挑选那些 –

+0

@AmitRanjan我也测试过它,它工作。如何发布一个小的,可编译的测试案例,显示你已经尝试过,以便我们可以谈论相同的代码.. – Eser

+0

抱歉,我的错误,它的工作。 –

相关问题