Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq删除多个对象_C#_Linq - Fatal编程技术网

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()
    获取要删除的列表
  • 类似这样的东西(在手机上,所以…):

    2个步骤:

  • 编写一个重载版本的
    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()));