1

我有一个列表类型:

List<Concept>
  --- Property
  --- List<Class2>
  --- --- Class2pty
  --- --- Class2pty2
  --- List<Class3>
  --- --- Class3pty

有一个查询字符串,我需要一个新的概念列表,该列表在任何属性(嗯,一种属性)上都有该查询字符串,例如PropertyClass2pty2Cl​​ass3pty ...

使用Where I can query 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< Class2 > 有大约 10 个Class2实例,其中一个(或者可能更多))在Class2Pty上有foo ,第三个项目在任何属性上都没有foo(在 Concept 实例本身和内部实例中),四个项目确实有它。

因此,当任何概念项目(包括他们的孩子)具有该foo项目的属性时,返回概念项目。在我们的例子中,1、2 和 4。

简而言之,拥有一个带有内部列表的概念列表,返回每个具有该字符串属性的概念,或者如果它们的一个子实例具有它。

4

1 回答 1

1

如果我正确理解您的问题,您想选择与条件匹配的外部类,并包含与条件匹配的内部类?

testConcepts.Where( c => c.Property == "SomeValue" 
                         && c.Classes.Any(cls => cls.Class2Pty > 1) );

如果概念没有匹配的属性,则将其消除。如果它们包含与预期标准匹配的类,则将返回与该属性匹配的概念。(在我的示例中,包含一个值 > 1 的属性,可以是任何条件。)

要从与其属性匹配的容器中返回匹配的子类,.SelectMany()可以使用:

testClasses = testConcepts.Where( c => c.Property == "SomeValue")
                       .SelectMany( c => c.Classes ).Where( cls => cls.Class2Pty > 1 );
于 2012-12-03T23:13:44.270 回答