我会尽力在这里解释我的头痛.
我有两个包含相同类型的通用列表,因此包含相同类型的字段:
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.
所以我不确定如何诚实地做到这一点.只是想着它让我头疼.它可能没有我想象的那么糟糕,但我无法用一种很好的方式来解决这个问题.
不完全清楚你正在寻找的是什么,但是为了将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列表.我认为你的解决方案将是这个解决方案与克里斯答案的混合体.