2013-09-21 86 views
0

我使用下面的类,在我的C#代码我做的数据库调用,它会从SQL表中获取数据,并转换到这ObjParent = List<Parent>如何LINQ过滤自定义对象?

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

+0

每个'Parent'具有Sub'的'名单,所以你的'criteria'无厘头来过滤Parent'的'名单。 –

+0

一个具体的例子会很有帮助,包括输入和预期输出。 –

回答

2

你没做规范IFY如果所有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(); 
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 hprivate使其成为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; 
    }