1

私はリストの種類を持っています:

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

クエリ文字列があるので、 PropertyClass2pty2Class3ptyなどの任意のプロパティ(まあ、一種のプロパティ)にそのクエリ文字列を持つ新しい概念のリストが必要です...

プロパティをクエリできる場所で、 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"

最初のリストアイテムはプロパティにfooを持ち、2番目のアイテム(List <Class2>にはClass2のインスタンスが10あり、そのうちの1つ(またはそれ以上)がClass2Ptyにfooを持っている想像してください)、3番目のアイテムはどのプロパティにもfooを持っていません(Conceptインスタンス自体と内部インスタンスで)、4つのアイテムにそれがあります。

したがって、コンセプトアイテム(子を含む)にそのfooアイテムを持つプロパティがある場合は、コンセプトアイテムを返します。私たちの場合、1、2、4です。

つまり、内部リストを含む概念のリストを作成し、その文字列を持つプロパティを持つすべての概念を返すか、子インスタンスの1つにその文字列がある場合に返します。

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 に答える