2012-04-30 27 views
2

我在C#兩個集合灌裝收集,根據集合體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

你想設置的名稱VALES上的一個的B?你的問題是有點短.. – IanNorton

回答

4

您可以創建一個字典的B

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

然後創建一個新的列表。

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

我會憂色LINQ來解決這個問題:

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

分配新項目是浪費,只是爲了填補一個領域? –

+0

@EladBenda我已經添加了一個替代品而不創建一個新變量。 – HW90

0

您可以嘗試的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

分配新項目只是爲了填補一個領域是浪費? –

0

您可以使用聯接:

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