2013-03-08 28 views
3

我試圖刪除使用LINQ其中兩個屬性的組合等於一個字符串的列表的所有引用。如何刪除兩個屬性的組合等於字符串的所有值?

比如:我有對象

class obj 
{ 
    string a; 
    string b; 
} 

,我有一個單獨的串x

所以我想刪除其中(a+b) == x

下面是我想要做的例子:

void Main() 
{ 
List<telefone> phones = new List<telefone>() 
    { 
     new telefone() 
     { 
      ddd = "21", numero="1234" 
     }, 
     new telefone() 
     { 
      ddd = "22", 
      numero="1234" 
     } 
    }; 


List<string> newPhones = new List<string>(){"1151814088", "11996081170", "098", "890", "99988", "6533"}; 

for(int i = 0; i < newPhones.Count; i++) 
    { 
    phones.Select(x => x.ddd + x.numero).ToList().RemoveAll(x => (x == phones[i])); 
} 
phones.Dump(); 
} 

public class telefone 
{ 
     //[System.Xml.Serialization.XmlIgnore] 
     internal string hash = String.Empty; 

     public String ddd { get; set; } 

     public String numero { get; set; } 

     public telefone() 
     { 
      ddd = String.Empty; 
      numero = String.Empty; 
     } 
} 

回答

5

您可以使用Where + Any

var removed = phones.Where(p => !newPhones.Any(np => np == p.ddd + p.numero)) 
        .ToList(); 

,甚至更好,List.RemoveAll因爲它不會創建一個新的列表:

phones.RemoveAll(p => newPhones.Any(np => np == p.ddd + p.numero)); 
+0

你的答案是差不多吧,只是你把「! 「所以它只是刪除每個人= D,但它工作後,我刪除了「!」在 phones.RemoveAll(p =>!newPhones.Any(np => np == p.ddd + p.numero)); 謝謝! – 2013-03-08 21:55:16

+0

@ user1955193:從Linq查詢中複製/粘貼錯誤;) – 2013-03-08 21:57:26

+0

加上它不需要循環來完成它= D – 2013-03-08 21:57:57

0

var filteredList = initialList.Where(obj => (obj.a + obj.b) != x);

您可能需要檢查空字符串。

相關問題