获取两个列表与特定条件的交集

可以说我有两个汽车列表

列表1:

  • “法拉利”,2005年,以 “$ 350,000”
  • “宝马”,2009年, “$ 29,000名”
  • “奥迪”,2011年, “$ 33,000名”
  • 列表2:

  • “无限”,2005年, “$ 267,000个”
  • “宝马”,2009年, “$ 45,000名”
  • “法拉利”,2005年, “$ 330,000”
  • “丰田”,2009年, “$ 35,000个”
  • 我知道我可以使用Intersect方法获取重复汽车列表。 但我也想保留价格较低的那个。 例如,我想要一些将返回的方法:

  • “法拉利”,2005年, “$ 330,000”
  • “宝马”,2009年, “$ 29,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());
    

    您可能需要修复语法...


    以下查询将匹配BrandYear属性中的汽车。 如果您只关心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;
    
    链接地址: http://www.djcxy.com/p/34289.html

    上一篇: Get the intersect of two list with specific criteria

    下一篇: Using group by on multiple columns