获取具有特定条件的两个列表的交集
本文关键字:两个 列表 特定条件 获取 | 更新日期: 2023-09-27 17:57:41
假设我有两个汽车列表
清单1:
- 《法拉利》,2005年,"35万美元"
- "宝马",2009年,"29000美元"
- "奥迪",2011年,"33000美元"
清单2:
- 《无限》,2005年,"267000美元"
- "宝马",2009年,"45000美元"
- 《法拉利》,2005年,"33万美元"
- "丰田",2009年,"35000美元"
我知道我可以通过使用Intersect方法得到一个重复汽车的列表。但我也想保留价格较低的那一个。例如,我想要一些将返回的方法:
- 《法拉利》,2005年,"33万美元"
- "宝马",2009年,"29000美元"
因为这些车的名字重复,而且价格最低
完全未经测试,但这样的东西怎么样?
var result = from c1 in List1
join c2 in List2 on c1.Name equals c2.Name
select new CarInfo()
{
Name = c1.Name, // Doesn't really matter which you take
Year = c1.Price < c2.Price ? c1.Year : c2.Year,
Price = c1.Price < c2.Price ? c1.Price : c2.Price
};
类似的东西?我假设您有Intersect的CarComparer IE质量位。
var cheapCars = list1.Intersect(list2, new CarComparer()).
OrderBy(c => c.Price).
GroupBy(c => c.Name).
Select(g => g.FirstOrDefault());
您可能需要修复语法。。。
以下查询将在Brand
和Year
属性上匹配汽车。如果您只关心Brand
,则可以更改联接条件以满足该目的。
var results = from car1 in list1
join car2 in list2
on new { car1.Brand, car1.Year }
equals new { car2.Brand, car2.Year }
select (car1.Price <= car2.Price) ? car1 : car2;