获得具有特定条件的两个列表的相交

问题描述

| 可以说我有两个汽车清单 清单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;