好的,这就是问题所在:

我有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);
}

10-05 21:22