2012-04-30 6 views
2

에 따라 I가 C#에서 두 개의 컬렉션을 내가 수집 B에 따라 나는이 어떻게 할 수있는컬렉션 작성 콜렉션 B

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

컬렉션 채우려

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"}, 
} 

? (? 내가 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에서에 알엇? 귀하의 질문은 조금 짧습니다. – IanNorton

답변

4

을 시도 할 수 있습니다.

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

그런 다음 새 목록을 만들 당신은 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

하나의 필드를 채우기 위해 새 항목을 할당하는 것은 낭비가됩니까? –

0

당신은 사용할 수 있습니다 조인 : 당신은 이름을 설정할

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