2017-01-02 5 views
0

私はいくつかのプロパティとリストを含むリストを持っています。私はプロパティの個別の値を持つレコードを選択したいどのように私はLINQを使用してリストから別のデータを選択

{item1 = 1, item2=2,list{a1=l1,a2=l2,a3=l5},item3 =3} 
{item1 = 21, item2=21,list{a1=l11,a2=l2,a3=l3},item3 =3} 
{item1 = 31, item2=22,list{a1=l12,a2=l2,a3=l3},item3 =3} 
{item1 = 41, item2=23,list{a1=l1,a2=l2,a3=l3},item3 =3} 

LINQ 例に リストを使用してそれを達成することができます内側のリストのプロパティに基づいて独自のレコードを選択したい「A1」I .IF !

{item1 = 21, item2=21,list{a1=l11,a2=l2,a3=l3},item3 =3} 
{item1 = 31, item2=22,list{a1=l12,a2=l2,a3=l3},item3 =3} 
{item1 = 41, item2=23,list{a1=l1,a2=l2,a3=l3},item3 =3} 
+0

あなたのクラスの構造を提供することができますか?私はあなたがそれらをどのように構築したのか分かりません(私に辞書のように見えます) – fharreau

+0

以下のLeppieは類似の構造です – Pavan

答えて

0

まず、あなたがあなたの内側のリストA1にGROUPBYにしたいし、そのグループ内選択:「A1」の重複する値を見つけた後、私は「A3」=「L5」

期待される結果値を比較しますa3!= "l5"の場合。

List<foo> col = new List<foo>(); 
List<string> tmp = new List<string> {"l1","l2","l5"}; 
col.Add(new foo {item1 = 1, item2=2,lst=tmp,item3 =3}); 
tmp = new List<string> {"l11","l2","l3"}; 
col.Add(new foo {item1 = 21, item2=21,lst=tmp,item3 =3}); 
tmp = new List<string> {"l12","l2","l3"}; 
col.Add(new foo {item1 = 31, item2=22,lst=tmp,item3 =3}); 
tmp = new List<string> {"l1","l2","l3"}; 
col.Add(new foo {item1 = 41, item2=23,lst=tmp,item3 =3}); 

var qry = col.GroupBy(i => i.lst[0]).Select(g => g.Where(j => j.lst[2]!="l5")); 

あなたa3は「L5」ではありません複数の重複がある場合は、これが望ましくない場合、何か他にフィルタリングする必要があるかもしれないので、あなたはそれらのすべてを取得します。

+0

こんにちはジムはお試しいただきありがとうございます。私の場合は文字列リストを検討しています。 。ですから、私は最初の[インデックス]はできません。 – Pavan

+0

この場合、サブオブジェクトの要素にアクセスできます。 –

0
class Log 
{ 
    public int DoneByEmpId { get; set; } 
    public string DoneByEmpName { get; set; } 

    } 

public class Class1 
{ 
    static void Range() 
    { 
     var array = new List<Log>() {new Log() {DoneByEmpId = 1,DoneByEmpName = "Jon"}, 
      new Log() { DoneByEmpId = 1, DoneByEmpName = "Jon" } , 
      new Log() { DoneByEmpId = 2, DoneByEmpName = "Max" }, 
      new Log() { DoneByEmpId = 2, DoneByEmpName = "Max" }, 
      new Log() { DoneByEmpId = 3, DoneByEmpName = "Peter" }}; 

     var ordered = 
      array.GroupBy(x => x.DoneByEmpId).ToList().Select(x => x.FirstOrDefault()).OrderBy(x => x.DoneByEmpName); 
     foreach (var item in ordered) 
     { 
      Console.WriteLine(item.DoneByEmpName); 
     } 
    } 
} 

結果:
ジョン
マックス
ピーター

関連する問題