在c#列表中选择具有最大值的特定记录

时间:2013-05-15 14:33:02

标签: c# linq select group-by max

我想选择优雅的foreach独特情侣(出发时间,到达时间,旅行等级),最好的记录以较低的价格在表格中加粗。

这低于给我带来结果的代码。

tripRepository.FindBy(x => x.SearchID == id).Include(b => b.Results)


- DepartureTime          ArrivalTime            TravelClass  Price 
====================================================================================

- 01/08/2013 09:13:00    01/08/2013 10:14:00     economy    4700
- 01/08/2013 09:13:00    01/08/2013 10:14:00     first      8300
- 01/08/2013 09:13:00    01/08/2013 10:14:00     economy    2750
- **01/08/2013 09:13:00  01/08/2013 10:14:00     first      3600**
- **01/08/2013 09:13:00  01/08/2013 10:14:00     economy    2000**
- 01/08/2013 10:11:00    01/08/2013 11:14:00     economy    4700
- 01/08/2013 10:11:00    01/08/2013 11:14:00     first      8300
- 01/08/2013 10:11:00    01/08/2013 11:14:00     economy    2750
- 01/08/2013 10:11:00    01/08/2013 11:14:00     first      2950
- **01/08/2013 10:11:00  01/08/2013 11:14:00     economy    2000**
- **01/08/2013 10:11:00  01/08/2013 11:14:00     first      2800**

非常感谢你

3 个答案:

答案 0 :(得分:2)

.GroupBy(m => new {
   m.DepartureTime,
   m.ArrivalTime,
   m.TravelClass
})
.Select(g  => g.OrderBy(x => x.Price).First());

答案 1 :(得分:0)

您应该可以执行以下操作:

var result = yourRepo.OrderBy(p => p.Price)
                     .ThenBy(n => n.Name)
                     .Take(stuff.Select(q => q.Name)
                                .Distinct()
                                .Count());

答案 2 :(得分:0)

与我在此处发布的内容相同:https://stackoverflow.com/a/16567385/2385557

试试这个:

public class Test
{
    public void Exec()
    {
        var items = new List<Item>{ 
        new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="economy" , Price =        4700 },
        new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="first"   , Price =        8300 },
        new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="economy" , Price =        2750 },
        new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="first"   , Price =        3600 },
        new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="economy" , Price =        2000 },
        new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="economy" , Price =        4700 },
        new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="first"   , Price =        8300 },
        new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="economy" , Price =        2750 },
        new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="first"   , Price =        2950 },
        new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="economy" , Price =        2000 },
        new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="first"   , Price =        2800 },

    };

        var result = items
                        .GroupBy(groupedItems => new { groupedItems.DepartureTime, groupedItems.ArrivalTime, groupedItems.TravelClass })
                        .SelectMany(i => items
                                             .Where(innerItem =>
                                                                    (innerItem.DepartureTime == i.Key.DepartureTime
                                                                    && innerItem.ArrivalTime == i.Key.ArrivalTime
                                                                    && innerItem.TravelClass == i.Key.TravelClass)
                                                                    && innerItem.Price == i.Min(ii => ii.Price))
                                             .Select(innerItem => innerItem)
                                             );

        foreach (var item in result)
            Console.WriteLine("Cheapest flight with departure at {0}, arrival at {1} and in travel class {2} costs {3}", item.DepartureTime, item.ArrivalTime, item.TravelClass, item.Price);

    }

    private class Item
    {
        public String DepartureTime { get; set; }
        public String ArrivalTime { get; set; }
        public String TravelClass { get; set; }
        public Int32 Price { get; set; }
    }

}

输出给出:

  

最便宜的航班,出发时间为01/08/2013 09:13:00,抵达时间为01/08/2013 10:14:00,旅行舱经济费用2000

     

最便宜的航班,出发时间为01/08/2013 09:13:00,抵达时间为2013年8月1日10:14:00,旅游舱首次出发费用为3600

     

最便宜的航班,出发时间为01/08/2013 10:11:00,抵达时间为01/08/2013 11:14:00,旅行舱经济费用2000

     

最便宜的航班,出发时间为01/08/2013 10:11:00,抵达时间为2013年8月1日11:14:00,旅游舱首先需要花费2800