如何删除两个属性组合等于字符串的所有值?

时间:2013-03-08 21:30:41

标签: c# linq

我正在尝试使用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;
        }
}

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

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

您可能想要检查空字符串。