2017-03-29 33 views
-2

我試圖根據多個字段獲得兩個集合之間的無與倫比的記錄。Linq-如何根據兩個集合中的多個字段獲取不匹配的記錄

public class Emp 
{ 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Amount { get; set; } 

public IList<Emp> GetMasterDetails() 
    { 
     IList<Emp> masterList = new List<Emp>    
     { 
      new Emp { Id = 952491, Name = "Z005HY11", Amount = 500 }, 
      new Emp { Id = 952491, Name = "Z005H717", Amount = 500 }, 
      new Emp { Id = 1191676, Name = "Z005H717", Amount = 400 }     
     }; 
     return masterList; 
    } 

    public IList<Emp> GetNonMasterDetails() 
    { 
     IList<Emp> nonMasterList = new List<Emp>    
     { 
      new Emp { Id = 952491, Name = "Z005H717", Amount = 500 }, 
      new Emp { Id = 1191676, Name = "Z005H717", Amount = 500 }, 
      new Emp { Id = 1227997, Name = "Z005HY11", Amount = 400 } 
     }; 
     return nonMasterList; 
    } 


} 

Emp obj = new Emp(); 
     IList<Emp> masterList = obj.GetMasterDetails(); 
     IList<Emp> nonMasterList = obj.GetNonMasterDetails(); 
     var first = masterList.Where(p => !nonMasterList.Any(l => p.Id == l.Id || p.Name ==l.Name)).ToList(); 
     var second = nonMasterList.Where(p => !masterList.Any(l => p.Id == l.Id || p.Name == l.Name)).ToList(); 

我想上面的lambda但它不工作。我在這裏做什麼錯了? 感謝

回答

0

您的查詢工作良好。不匹配的記錄,其中Id或Name是相等的。也許您正在搜索不匹配的記錄,其中名稱是相等的,其中Id (& &)。或者只是ID或名稱XOR(^)。

只需更換||& &,看看這是你想要的。

提示您的問題:

清除您的標籤。這個問題不是關於asp.net和wpf。只是linq,C#和布爾表達式。另外,請在你的提議中明確。

說,我想不匹配的記錄。當它的ID和它的名字相同時,兩個記錄匹配。

+0

對不起文章。我已經更新了這個問題中的數據,但沒有成功。 – user1301587

+0

你期望什麼數據? &&幫助你? –

+0

您的OR條件p.Id == l.Id ||當Id或Name相等時,p.Name == l.Name返回true。使用這種情況下,您列表中的所有數據在另一個數據中具有相同的記錄。 –

相關問題