好的,这就是问题所在:
我有两个车辆列表
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?
答案 0 :(得分:1)
删除必须使用foreach
(因为LINQ不应该更改集合),但除此之外,您可以获取不需要的品牌,然后使用LINQ从carlist1
中删除项目:< / p>
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);
}
答案 1 :(得分:0)
写一个'RemoveWhere'扩展名可能会很有用,它可以让你写:
var brandsToRemove = list2.Select(c => c.Brand);
list1.RemoveWhere(c => brandsToRemove.Contains(c.Brand));
扩展名如下:
public static void RemoveWhere<T>(this List<T> list, Predicate<T> predicate)
{
foreach (var ele in list)
{
if (predicate(ele))
list.Remove(ele);
}
}