2017-01-05 8 views
0

私はいくつかのオブジェクトの二重レベルのリストを持っています。私はいくつかの条件に基づいていくつかのプロパティ値のリストを取得したい。私はPROP2値を持つ一覧を取得したいダブルレベルのオブジェクトリストからオブジェクトのリストを選択

List<List<Demo>> lst = new List<List<Demo>>(); 

List<Demo> lstdemo1 = new List<Demo> 
lstdemo1.Add(new Demo(){Prop1 = "1", Prop2="abc"}); 
lstdemo1.Add(new Demo(){Prop1 = "2", Prop2="pqr"}); 

List<Demo> lstdemo2 = new List<Demo> 
lstdemo2.Add(new Demo(){Prop1 = "1", Prop2="mno"}); 
lstdemo2.Add(new Demo(){Prop1 = "2", Prop2="xyz"}); 

lst.Add(lstdemo1); 
lst.Add(lstdemo2); 

今すぐ上記のクラスのオブジェクトの二重のリストを作成している

public class Demo 
{ 
    public string Prop1 {get; set;} 
    public string Prop2 {get; set;} 
} 

ため

私はクラスPROP1依存する次います値 例:Prop1が「1」に等しいProp2のリストを取得したい

私が使用SelectMany

"ABC"、 "MNO"

答えて

2

最も簡単な方法は、LINQのを利用することですSelectManyを使用してリストをフラット化します。

var query = from x in lst 
      from y in x 
      where y.Prop1.Equals("1") 
      select y.Prop2; 

または、メソッドの構文でSelectManyを呼び出すことにより:クエリ構文で2つのfrom句を使用してこれを実現

var query = lst.SelectMany(x => x.Where(y => y.Prop1.Equals("1")) 
           .Select(y => y.Prop2)); 
+0

説明をいただきありがとうございました。 :-) –

+0

問題ありません。 LINQを初めて使用している場合は、特にリストを複数回列挙しようとしている場合は、結果にToList()を呼び出して実際にクエリを実行することを忘れないでください。 –

+0

ToList()は正しく動作します.. ありがとう:-) –

2

が含まれてい lstoutput出力 List<string>を次欲しい:

var result = lst.SelectMany(o => o).Where(o => o.Prop1 == "1").Select(o => o.Prop2).ToList(); 
+0

はありがとうございました!!! :-) –

+0

あなたの解決策は私にとって間違いなく働いています –

関連する問題