我有一个List类:
List<Concept>
--- Property
--- List<Class2>
--- --- Class2pty
--- --- Class2pty2
--- List<Class3>
--- --- Class3pty
有一个查询字符串,我需要一个新的概念列表,它在任何属性上都有查询字符串(好吧,一种属性),比如 Property 或 Class2pty2 , Class3pty ...
使用 Where 我可以查询 Property ,但我不知道如何查询 Class2pty ,如果匹配,则返回具有 Class2
的概念那么,我可以使用单个嵌套查询执行此操作,还是可以执行哪些操作?
编辑:由于我不清楚,我举了一个例子
想象一下,我有一个“foo”的查询字符串,我有一个包含这4项的列表
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"
第一个列表项在 Property 上有 foo ,在第二个项目上(想象List&lt; Class2&gt;有10个 Class2 的实例和其中一个(或者更多))在 Class2Pty 上有 foo ,第三个项目在任何属性上都没有 foo (在Concept中)实例本身和内部实例),有四个项目确实有它。
因此,当任何Concept项(包括其子项)具有包含 foo 项的属性时,请返回Concept项。在我们的例子中,1,2和4。
简而言之,拥有一个包含内部列表的概念列表,返回具有该字符串属性的每个Concept,或者如果其中一个子实例拥有它。
答案 0 :(得分:0)
如果我正确理解你的问题,你想选择与条件匹配的外类,并包含一个匹配条件的内部类?
testConcepts.Where( c => c.Property == "SomeValue"
&& c.Classes.Any(cls => cls.Class2Pty > 1) );
如果Concept没有匹配属性,则将其删除。如果包含与预期条件匹配的类,则将返回与该属性匹配的概念。 (在我的示例中,包含值> 1的属性,可以是任何条件。)
要返回与其属性匹配的容器匹配的子类,可以使用.SelectMany()
:
testClasses = testConcepts.Where( c => c.Property == "SomeValue")
.SelectMany( c => c.Classes ).Where( cls => cls.Class2Pty > 1 );