2

さて、これが問題です:

車のリストが 2 つある

ObservableCollection<Car> carlist1;
ObservableCollection<Car> carlist2; 

そして、車のオブジェクトには車のブランドとエンジンのサイズがありますが、ブランドに基づいて carlist2 が持っていない車だけを持つ carlist1 になってしまいます。

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 に変換するにはどうすればよいですか?

4

2 に答える 2

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);
        }
    }
于 2013-07-13T16:29:08.200 に答える