Querying multiple properties of List items
我有一个列表类型:
1 2 3 4 5 6 7 | List<Concept> --- Property --- List<Class2> --- --- Class2pty --- --- Class2pty2 --- List<Class3> --- --- Class3pty |
有了一个querystring,我需要一个新的概念列表,在任何属性(好的,一种属性)上都有这个querystring,比如property或class2pty2、class3pty…
使用where,我可以查询属性,但我不知道如何查询class2pty,如果匹配,则返回具有该class2的概念
那么,我可以用一个嵌套查询来实现这一点吗,或者我可以做什么呢?
编辑:由于我不清楚,我举了个例子
假设我有一个"foo"的查询字符串,并且我有一个包含这4项的列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Concept --- Property ="foo" --- List<Class2> --- --- Class2pty --- --- Class2pty2 --- List<Class3> --- --- Class3pty Concept --- Property --- List<Class2> --- --- Class2pty ="foo" --- --- Class2pty2 --- List<Class3> --- --- Class3pty Concept --- Property --- List<Class2> --- --- Class2pty ="bar" --- --- Class2pty2 --- List<Class3> --- --- Class3pty Concept --- Property --- List<Class2> --- --- Class2pty --- --- Class2pty2 --- List<Class3> --- --- Class3pty ="foo" |
第一个列表项在属性上有foo,第二个列表项(假设列表
因此,当任何概念项(包括其子项)具有该foo项的属性时,返回该概念项。在我们的例子中,1、2和4。
简而言之,拥有一个包含内部列表的概念列表,返回每个具有该字符串的属性的概念,或者如果它们的一个子实例具有该属性。
如果我正确理解您的问题,您希望选择与条件匹配的外部类,并包含与条件匹配的内部类?
1 2 | testConcepts.Where( c => c.Property =="SomeValue" && c.Classes.Any(cls => cls.Class2Pty > 1) ); |
如果概念没有匹配的属性,则将其消除。如果与属性匹配的概念包含与预期条件匹配的类,则将返回这些概念。(在我的示例中,包含值大于1的属性,可以是任何条件。)
要从与其属性匹配的容器返回匹配的子类,可以使用
1 2 | testClasses = testConcepts.Where( c => c.Property =="SomeValue") .SelectMany( c => c.Classes ).Where( cls => cls.Class2Pty > 1 ); |