问题描述
|
可以说我有两个汽车清单
清单1:
\“ Ferrari \”,2005年,\“ $ 350,000 \”
\“ BMW \”,2009年,\“ $ 29,000 \”
\“ Audi \”,2011年,\“ $ 33,000 \”
清单2:
\“ Infinity \”,2005年,\“ $ 267,000 \”
\“ BMW \”,2009年,\“ $ 45,000 \”
\“ Ferrari \”,2005年,\“ $ 330,000 \”
\“丰田\”,2009年,\“ $ 35,000 \”
我知道我可以使用“相交”方法来获得重复的汽车列表。但我也想保留价格较低的那一款。例如,我想要一些将返回的方法:
\“ Ferrari \”,2005年,\“ $ 330,000 \”
因为那些是重复名字的汽车,而且价格最低
解决方法
完全未经测试,但是这样的事情怎么样?
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
};
,像这样吗我假设您具有相交的CarComparer IEquality位。
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;