2013-07-13 7 views
2

이 좋아이 문제입니다 크기지만 carlist2는 브랜드를 기반으로하지 않는 자동차를 가지고있는 carlist1로 끝나기를 좋아합니다.람다/Linq에

car (mazda, 1.6) 
car (audi 2.4) 
car (golf 2.0) 

및 carlist2에는 다음이 포함됩니다 :

carlist1는 포함

car (mazda 1.6) 
car (mazda 1.0) 
car (audi 2.0) 
car (mercedes 2.8) 

그래서이 예제에서는 골프가 단지에 carlist1을하고 싶습니다.

 foreach (car c2 in carlist2) 
     { 
      foreach (car c1 in carlist1) 
      { 
       if (c1.Brand == c2.Brand) 
       { 
        carlist1.remove(c1) 
        break; 
       } 
      } 
     } 

내가 LINQ 또는 람다이 변환 방법은 다음과 같습니다

이 그렇게 내 코드는?

+1

'carlist2'가 솔직히 무엇을해야하는지 명확하지 않습니다. 'carlist1'은'carlist2'가 전혀 개입하지 않은 채 독특한 브랜드를 만들 수 있습니다 ... –

+0

'carlist1'에는 이미 고유 브랜드가 포함되어 있습니다. 고유하게 유지하기 위해 추가 할 항목을 제어 할 수 없습니까? –

+0

미안 .. 내 마음이 어딘가에있는 것 같아 .. 질문을 업데이 트했습니다. – Mathias

답변

1

제거 (LINQ가 컬렉션을 변경하기로되지 않는) foreach 함께 할 수있다, 그러나 당신이 원치 않는 브랜드와 다음 항목을 가져올 수 있다는 이외의 LINQ와 carlist1에서 제거 :

var carlist2Brands = carlist2 
    .GroupBy(c => c.Brand) 
    .Select(g => g.Key) 
    .ToArray(); 
var carsToRemove = carlist1 
    .Where(c => carlist2Brands.Contains(c.Brand)) 
    .ToArray(); 
foreach (var car in carsToRemove) 
{ 
    carlist1.Remove(car); 
} 
0

그것을

var brandsToRemove = list2.Select(c => c.Brand); 
list1.RemoveWhere(c => brandsToRemove.Contains(c.Brand)); 

을 확장은 다음과 같습니다 :

,927 당신이 쓸 수 있도록하는 'RemoveWhere'확장을 작성하는 유용 할 수 있습니다