2012-04-30 25 views
2

によると、私はC#での2つのコレクション充填コレクションコレクションB

A: { 
     {id:4, name:"", age:1}, 
     {id:3, name:"", age:3}, 
     {id:2, name:"", age:5}, 
} 

B: { 
     {id:2, name:"aa"}, 
     {id:4, name:"bb"}, 
     {id:3, name:"cc"}, 
} 

を持っている私は、私がこれをどのように行うことができますコレクションコレクションBに応じ

A: { 
     {id:2, name:"aa",age:5}, 
     {id:4, name:"bb",age:1}, 
     {id:3, name:"cc",age:3}, 
} 

を埋めるためにしたいですか? (?私は、LINQを使用する必要があります)

私が使用:

private static void FillIsCpHidden(ref Collection A) 
     { 
      var B= CollectionB.ToDictionary(item => item.id); 

      foreach (var item in A) 
      { 
       item.name= B[item.id].name; 
      } 
     } 
+0

あなたは名前がBからAにバレス設定したいですか?あなたの質問は少し短いです。 – IanNorton

答えて

4

を試すことができます。あなたが使用することができ

var c = A.Select(a=>new{ a.id, name=dictB[a.Id].name,a.age }); 
0

私はこの問題を解決するためにLINQをyouseます:

var d = (from i in A select new { id = i.id, age=i.age, 
name = (from b in B where b.id == i.id select b.name).SingeleOrDefault()}).ToList(); 

新しい変数を作成せずに別の可能性:

A = A.Select(d=>new{ d.id, name=a=>new{ a.id, name=dictB[a.Id].name,d.age}) 
+0

1つのフィールドを埋めるために新しいアイテムを割り当てるのは無駄でしょうか? –

+0

@EladBenda新しい変数を作成せずに代替案を追加しました。 – HW90

0

あなたは、あなたが新しいリストを作成B

var dictB = B.ToDictionary(b=>b.id); 

から辞書を作成することができますLINQの

var collectionB = collectionA.Select(p=>new B() { id=p.id, name=p.name}); 

または

var collectionA = collectionB.Select(p=>new A() { id=p.id, name=p.name}); 
+0

新しいフィールドを割り当てるのは無駄でしょうか?フィールドを1つだけ埋めるのですか? –

0

加入:

var result = a.Join(b, 
        o => o.Id, 
        i => i.Id, 
        (o, i) => new { o.Id, i.Name, o.Age });