【问题标题】:Select specific records in a c# list with a max value在具有最大值的 c# 列表中选择特定记录
【发布时间】:2023-04-01 09:15:01
【问题描述】:

我想为每对独特的情侣(出发时间、到达时间、旅行舱位)优雅地选择价格较低的最佳记录,在表格中以粗体显示。

这是给我带来结果行的代码下方。

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**

非常感谢

【问题讨论】:

    标签: c# linq select group-by max


    【解决方案1】:
    .GroupBy(m => new {
       m.DepartureTime,
       m.ArrivalTime,
       m.TravelClass
    })
    .Select(g  => g.OrderBy(x => x.Price).First());
    

    【讨论】:

      【解决方案2】:

      您应该能够执行以下操作:

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

      【讨论】:

        【解决方案3】:

        与我在此处发布的方式相同: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; }
            }
        
        }
        

        输出给出:

        2013 年 1 月 8 日 09:13:00 出发,2013 年 1 月 8 日 10:14:00 抵达的最便宜航班,经济舱票价为 2000

        2013 年 1 月 8 日 09:13:00 出发,2013 年 1 月 8 日 10:14:00 抵达的最便宜航班,头等舱票价 3600

        2013 年 1 月 8 日 10:11:00 出发,2013 年 1 月 8 日 11:14:00 抵达的最便宜航班,经济舱票价为 2000

        2013 年 1 月 8 日 10:11:00 出发,2013 年 1 月 8 日 11:14:00 抵达的最便宜航班,头等舱票价 2800

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多