2012-05-02 7 views
0

タイトルが泥だと分かりますので、例を捨てて誰かが正しい方向に向けることができるかどうか確認してください。Linqを使って行う方法:オブジェクトリスト内のすべてのリストのリストをコンパイルする

public class topObj 
{ 
    public List<midObj> Mids { get; set; } 
    public List<botObj> Bots { get { // do some LINQ magic here } } 
} 
public class midObj 
{ 
    public List<botObj> Bots { get; set; } 
} 
public class botObj 
{ 
} 

トップオブジェクトから、リスト<>のトップオブジェクトからの中間オブジェクトのリスト<>にあるすべてのボトムオブジェクトのリストを取得しようとしています。

public List<botObj> Bots 
    { 
     get 
     { 
      List<botObj> lst = new List<botObj>(); 
      foreach (midObj mo in Mids) 
      { 
       lst.AddRange(mo.Bots); 
      } 

      return lst; 
     } 
    } 

それはもちろん、動作しますが、私はLINQが少ないラインでこれを行うための方法がありますと仮定しなければなりません:

今私はこのようなものを持っています。

答えて

3
get { return Mids.SelectMany(mid => mid.Bots).ToList(); } 

は、私は、少なくともあなたが本当にする必要がある場合にのみそれをすべてを評価し、リストに入れる努力を費やすようにだけ、ListではなくIEnumerable<botObj>を返す検討したいです。リストを使って何をしているのか分かっているなら、このコメントを無視してください。

+0

Entity Frameworkに適用すると、IENumerableはListよりもはるかに優れていますが、EF以外では多くの違いがありますか?私はこれを複数の他の開発者が使用する場所に構築していますので、リストを使用して簡単にリストを使用し、IENumerableを使用して唯一の理由はEHベースです...私たちは使用しません。 – cavillac

+0

EFはIEnumerableをまったく使用せず、IQueryableを使用しますが、2つのメソッドがほとんど同じですが、実際の動作は大きく異なります。 IEnumerablesは、メモリオブジェクトを扱う際にはまだ非常に便利です。アイデアには、インメモリコレクションのクエリがあります。後で、そのクエリの結果を列挙することはできますが、クエリはその時点まで実行されません。実際にListが必要な場合は、結果に 'ToList'をいつでも呼び出すことができますので、IEnumerableを返す何かを失うことはありません。 – Servy

0

あなたはこのような何かをする必要があります。

get{ Mids.SelectMany(x => x.Bots).ToList(); } 

はそれが役に立てば幸い!

関連する問題