0

我正在使用以下类,并且在我的 C# 代码中我正在执行 DB 调用,它将从 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;
}

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

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

4

2 回答 2

2

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

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();
于 2013-09-21T18:29:44.363 回答
0

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;
    }
于 2013-12-31T12:41:13.973 回答