2

List<t>別の内部で値を検索するにはどうすればよいですかList<t>

すなわち

//FooInner Class
public class FooInner {

  public int FooInnerId { get; set; }
  public String FooValue { get; set; }

}   

//FooOuter Class
public class FooOuter {

  public int FooOuterId { get; set; }
  public List<FooInner> FooInnerCollection { get; set; }

}

外側のクラスで値を見つけたいだけの場合

// Working code

List<FooOuter> fooOuterCollection = GetSomeData(); 

var tmp = fooOuterCollection.Find( f => f.FooOuterId == 2 );

しかし、FooInnerオブジェクトが必要な場合はどうすればよいでしょうか (またはFooOuterId == 2FooInnerCollection.FooInnerId == 4見方によっては含む)。

うまくいけば、それは理にかなっています。

4

3 に答える 3

4
fooOuterCollection
    .Where(outer => outer.FooOuterID == 2)
    .SelectMany(outer => outer.FooInnerCollection)
    .FirstOrDefault(fooInner => fooInner.FooInnerId == 4);

最初に、外側のオブジェクトをフィルタリングして、Id == 2 のオブジェクトのみを含めます。

次に、SelectMany を使用して、見つかった複数の InnerCollection をフラット化します。

最後に、内部 ID == 4 に基づいてフィルタリングします

于 2013-07-28T19:08:59.613 に答える
3

このような内部オブジェクトを取得できます-

var temp=  fooOuterCollection.Where(f => f.FooOuterId == 2)
            .SelectMany(f => f.FooInnerCollection)
            .FirstOrDefault(fi => fi.FooInnerId == 4));

外部オブジェクトが必要な場合は、Any()拡張メソッドを使用して確認する必要がありますinner list contains required element-

var temp = fooOuterCollection.FirstOrDefault(f => f.FooOuterId == 2 &&
               f.FooInnerCollection.Any(fi => fi.FooInnerId == 4);
于 2013-07-28T19:06:06.410 に答える
0

LINQ のクエリ構文を使用できます。

var results = from o in outerList
      where o.FooOuterId == 2
      from i in o.FooInnerCollection
      where i.FooInnerId == 4
      select i;
于 2013-07-28T19:10:40.060 に答える