2015-10-13 161 views
0

我有兩個對象列表,我必須刪除其他列表中刪除的值到'原始'列表中;但該項目由兩個屬性標識。 我能做到這一點,當對象僅由一個屬性標識,但現在我需要檢查兩個屬性從列表C#中刪除項目#

// library: object with deleted data 
// library = new List<Widget>() { new Widget() { Id = "1", Nbr = 1 }, new Widget() { Id = "3", Nbr = 2 } }; 
var allData = GetData(); 
// allData = new List<Widget>() { new Widget() { Id = "1", Nbr = 1 }, new Widget() { Id = "2", Nbr = 1 }, new Widget() { Id = "3", Nbr = 2 } }; 
// var itemsToDelete = allData.Where(w => library.All(p => p.Id != w.Id)).ToList(); // I would do this, if the identifier would be only Id 

var itemsToDelete = allData.Where(w => library.All(p => p.Id != w.Id && p.Nbr != w.Nbr)).ToList(); // I need to check for two properties and I'm getting zero coincidences 
+3

對我來說一見鍾情,你是否檢查過你的數據和你的狀況? – Jannik

+1

會很高興得到一些樣本數據 – Prescott

+0

你得到的library.All(p => p.Id!= w.Id && p.Nbr!= w.Nbr)? – g2000

回答

3
var itemsToDelete = allData.Where(w => !library.Any(p => p.Id == w.Id && p.Nbr == w.Nbr)).ToList(); 

應該是正確的,但不是最佳的。 (O^2)

+0

那麼,這是訣竅 – user3557832