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;
        }
}
4

2 回答 2

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));
于 2013-03-08T21:35:59.263 回答
0

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

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

于 2013-03-08T21:35:38.747 回答