比较2个列表

Pos*_*Guy 1 c#

我会尽力在这里解释我的头痛.

我有两个包含相同类型的通用列表,因此包含相同类型的字段:

List<Car> car1 = GetCars1();
List<Car> car2 = GetCars2();
List<Car> finalListOfCars2 = new List<Car>();
Run Code Online (Sandbox Code Playgroud)

所以Car有一个名为BumperTypeID的字段

我想比较列表car1和car2,并从car2中找到那些car2,其中car2 [index] .BumperTypeID存在于car1的BumperTypeIDs列表中的所有BumperTypeID列表中.如果它在car1的BumperTypeIDs列表中找到,那很好......但是我需要在此之后再做一次检查以检查ColorIsBlack.如果第二次检查结果为真,那么确定我们很好,将当前的car2 [index]添加到finalList.

所以我不确定如何诚实地做到这一点.只是想着它让我头疼.它可能没有我想象的那么糟糕,但我无法用一种很好的方式来解决这个问题.

Age*_*191 5

不完全清楚你正在寻找的是什么,但是为了将List与List进行比较,你可以使用Intersect<T>()扩展方法.它将返回两个列表中存在的所有项的列表.

如果您要查找存在于一个列表中但不存在于另一个列表中的项目,请使用该Except<T>()方法.

编辑:根据您的编辑,您的代码将如下所示:

public void CompareLists(List<Car> carList1, List<car> carList2){
    var car1Ids = carList1.Select(l => l.BumperTypeID);
    var car2Ids = carList2.Select(l => l.BumperTypeID);

    // Find all cars in List2 that have matching BumperTypeID's
    // and filter it that list further based on the color.
    var matchedIds = car2Ids.Intersect(car1Ids).Where(x => x.Color == Color.Black);

    // do your work here.
}
Run Code Online (Sandbox Code Playgroud)

这是我在其他地方用来合并项目列表的方法.您可以在另一个问题中参考我的答案,了解更多详情.

EDIT2:根据您更新的问题,我更新了代码.这假设集合中有一个唯一的BumperTypeID列表.我认为你的解决方案将是这个解决方案与克里斯答案的混合体.