2015-08-31 111 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

抱歉,我的錯誤,它的工作。 –

相關問題