好的,这就是问题所在:
我有2辆汽车的清单
ObservableCollection<Car> carlist1;
ObservableCollection<Car> carlist2;
汽车对象具有汽车品牌和发动机尺寸,但是我想最终得到carlist1,而只拥有carlist2没有基于该品牌的汽车。
carlist1包含:
car (mazda, 1.6)
car (audi 2.4)
car (golf 2.0)
和carlist2包含:
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或Lambda?
最佳答案
必须使用foreach
进行删除(因为LINQ不应更改集合),但除此之外,您还可以获取不需要的品牌,然后使用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);
}