C# Linq删除多个对象
我可以搜索列表中的每个项目,如果该项目存在,那么我将其从列表中删除,如下所示 然而,与其写那么多行代码,我只是想知道有没有更好的方法C# Linq删除多个对象,c#,linq,C#,Linq,我可以搜索列表中的每个项目,如果该项目存在,那么我将其从列表中删除,如下所示 然而,与其写那么多行代码,我只是想知道有没有更好的方法 var math = subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Math.ToString())).FirstOrDefault(); if (math != null) subclasses.Classes.Remove(math); var chem= subclasses.
var math = subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Math.ToString())).FirstOrDefault();
if (math != null) subclasses.Classes.Remove(math);
var chem= subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Chem.ToString())).FirstOrDefault();
if (chem!= null) subclasses.Classes.Remove(chem);
var physics= subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Physics.ToString())).FirstOrDefault();
if (physics!= null) subclasses.Classes.Remove(physics);
2个步骤:
Remove()。(假设原始Remove是您自己的实现,并且是名为Classes的类的方法)
Array.Contains()
获取要删除的列表Remove()。(假设原始Remove是您自己的实现,并且是名为Classes的类的方法)
Array.Contains()
获取要删除的列表您可以使用Except扩展方法:
var exceptions = subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Math.ToString()
|| x.Id.Equals(Constants.Classes.Chem.ToString()
|| x.Id.Equals(Constants.Classes.Physics.ToString());
var result = subclasses.Classes.Except(exceptions);
您可以使用Except扩展方法:
var exceptions = subclasses.Classes.Where(x => x.Id.Equals(Constants.Classes.Math.ToString()
|| x.Id.Equals(Constants.Classes.Chem.ToString()
|| x.Id.Equals(Constants.Classes.Physics.ToString());
var result = subclasses.Classes.Except(exceptions);
如果
类
是列表
,则可以在不使用LINQ的情况下将它们全部删除:
如果
类
是列表
,则可以在不使用LINQ的情况下将它们全部删除:
尝试去哪里,除了化学和数学physics@Dolev你能举例说明一下吗?为什么是FirstOrDefault()?是否有不止一个符合条件,而你只想杀死第一个?试着去哪里,把除了化学和数学以外的所有东西都拿走physics@Dolev你能举例说明一下吗?为什么是FirstOrDefault()?是否有不止一个符合条件,而你只想杀死第一个?假设
类
是一个列表
,我想。@kenneth是的,你是对的。哎哟哎哟,我错过了OP提到“名单”的那部分。在手机上,所以看不到太多;)假设类
是一个列表
,我想。@kenneth是的,你是对的。哎哟哎哟,我错过了OP提到“名单”的那部分。在手机上,所以看不到太多;)
subclasses.Classes.RemoveAll(x => x.Id.Equals(Constants.Classes.Math.ToString())
|| x.Id.Equals(Constants.Classes.Chem.ToString())
|| x.Id.Equals(Constants.Classes.Physics.ToString()));