2012-02-29 11 views
7

別のオブジェクトリストに変換するオブジェクトのリストがあります。linqまたはlambda式を使用したオブジェクトのグループ化

第1の目的は次のようになります。私はにObjectOneデータのリストを変換することができますLINQクエリやラムダ式を書きたいと思い、この

public class ObjectTwo 
{ 
    public string Name { get; set; } 
    public IEnumerable<string> Items{ get; set; } 
} 

よう

private class ObjectOne 
    { 
     public string Name { get; set; } 
     public string Item{ get; set; } 
    } 

別ObjectTwoデータのリスト。 ObjectTwoのリストの各項目には、ObjectOneとは異なる名前が付けられ、その名前に関連付けられたすべての項目の列挙が行われます。 ObjectOneデータ

"Name One", "Item One" 
"Name One", "Item Two" 
"Name Two", "Item Three" 

の以下のリストは、以下のObjectTwoリストを生成する例えば

"Name One", {"Item One", "Item Two"} 
"Name Two", {"Item Three"} 

答えて

8

GroupBy Linq演算子を使用します。次に、各グループごとに、キー(グループ化に使用したキー)を選択し、各グループの項目をリストに変換します。

var oneList = new List<ObjectOne> 
       { 
       new ObjectOne {Name = "Name One", Item = "Item One"}, 
       new ObjectOne {Name = "Name One", Item = "Item Two"}, 
       new ObjectOne {Name = "Name Two", Item = "Item Three"} 
       }; 

var twoList= oneList.GroupBy(x => x.Name) 
        .Select (x => new ObjectTwo 
            { 
             Name = x.Key, 
             Items = x.Select(t => t.Item) 
            }); 
+1

+1 *問い合わせ構文を使用しています。 "one =>"の代わりに "n =>"と書くだけなら+2になります:) –

+0

乾杯、更新コード。それは良く見えるようです:) –

+0

@ブライアン宏、感謝は完璧に動作します! – zaq

2

あなたはgroup by LINQ演算子を使用してこれを達成することができます

var obj2List = 
    from o in list 
    group o by o.Name into g 
    select new ObjectTwo() {Name = g.Key, Items = g.Select(x => x.Item)}; 
関連する問題