C# 如果两个属性的组合等于一个字符串,如何删除所有值?
我试图使用LINQ删除列表的所有引用,其中两个属性的组合等于一个字符串 例如:我有这个对象C# 如果两个属性的组合等于一个字符串,如何删除所有值?,c#,linq,C#,Linq,我试图使用LINQ删除列表的所有引用,其中两个属性的组合等于一个字符串 例如:我有这个对象 class obj { string a; string b; } 我有一个单独的字符串x 所以我想删除where(a+b)==x 下面是我想做的示例: void Main() { List<telefone> phones = new List<telefone>() { new telefone() {
class obj
{
string a;
string b;
}
我有一个单独的字符串x
所以我想删除where(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;
}
}
void Main()
{
列表电话=新列表()
{
新电传
{
ddd=“21”,numero=“1234”
},
新电传
{
ddd=“22”,
numero=“1234”
}
};
List newPhones=newlist(){“1151814088”、“11996081170”、“098”、“890”、“99988”、“6533”};
for(int i=0;ix.ddd+x.numero).ToList().RemoveAll(x=>(x==phones[i]);
}
电话。转储();
}
公用电话
{
//[System.Xml.Serialization.XmlIgnore]
内部字符串哈希=string.Empty;
公共字符串ddd{get;set;}
公共字符串numero{get;set;}
公用电话()
{
ddd=String.Empty;
numero=String.Empty;
}
}
var filteredList=initialList.Where(obj=>(obj.a+obj.b)!=x)代码>
您可能需要检查空字符串。您可以使用Where
+Any
var removed = phones.Where(p => !newPhones.Any(np => np == p.ddd + p.numero))
.ToList();
或者更好,因为它不会创建新列表:
phones.RemoveAll(p => newPhones.Any(np => np == p.ddd + p.numero));
你的答案几乎是对的,只是你把“!”放在手机上,所以它只是删除了everyone=D,但在我删除手机上的“!”之后,它就起作用了。RemoveAll(p=>!newPhones.Any(np=>np==p.ddd+p.numero));谢谢@user1955193:从Linq查询复制/粘贴错误;)另外,它不需要一个循环来完成它=D