如何 LINQ 筛选自定义对象

本文关键字:对象 自定义 筛选 LINQ 如何 | 更新日期: 2023-09-27 18:32:12

>我正在使用以下类,在我的 C# 代码中,我正在执行数据库调用,它将从 SQL 表中获取数据并将其转换为ObjParent = List<Parent>

class Parent
{
 string a;
 string b;
 int c;
 MyEnum d;
 List<Sub> e;
}
class Sub
{
 String f;
 int g;
 bool h;
}

现在我的输入是用 c# ObjParent = List< Parent>的,我的要求是过滤这个对象,其中条件为 (Boolean) h= True/ False 在返回类型中,它应该再次提供过滤列表objFilteredParent = List< Parent>

由于过滤器是用于子列表的,因此我被困在这里,关于如何通过 LINQ 完成它

如何 LINQ 筛选自定义对象

您没有指定是否所有Sub元素都必须满足条件,仅在其中一个元素上,但您应该使用AllAny方法:

var objFilteredParent = ObjParent.Where(x => x.e.All(y => y.h)).ToList();
// or
var objFilteredParent = ObjParent.Where(x => x.e.Any(y => y.h)).ToList();

Hemant 先生,
根据您的问题不清楚,您需要List<Sub>中的所有对象都具有true h 的值,或者其中任何一个都是true
如果您希望所有值都true使用它,

 List<Parent> objFilteredParent = ObjParent.FindAll(par => par.e.All(sub => sub.h));

如果您需要列表中的任何一个具有true值使用,

 List<Parent> objFilteredParent = ObjParent.FindAll(par => par.e.Any(sub => sub.h));

我在粘贴内容时注意到的另一件事是,List<Sub>bool h private使其public或为两个变量添加一些属性,然后将这些变量名称替换为上面的 LINQ 中的相应属性名称。
例如,我已将这些变量设置为public

    class Parent
    {
        string a;
        string b;
        int c;
        //MyEnum d;
        public List<Sub> e;
    }
    class Sub
    {
        String f;
        int g;
        public bool h;
    }