如何用LINQ查询获取乘客数量最多的Flight对象?
获取乘客数量最多的Flight对象解决方案
基础实现(.NET 6+)
直接使用MaxBy方法,结合Sum统计每个航班的总乘客数:
var mostPassengersFlight = _flights.MaxBy(flight => flight.Bookings.Sum(booking => booking.Passengers.Count()) );
- 逻辑说明:遍历每个航班,通过
Sum累加该航班下所有预订的乘客数量,再用MaxBy直接筛选出乘客总数最多的航班对象。
.NET 6之前版本兼容实现
如果项目使用的是.NET 6以下版本(无MaxBy方法),可以通过投影+排序实现:
var mostPassengersFlight = _flights .Select(flight => new { Flight = flight, TotalPassengers = flight.Bookings.Sum(booking => booking.Passengers.Count()) }) .OrderByDescending(item => item.TotalPassengers) .FirstOrDefault()?.Flight;
- 逻辑说明:先将航班和对应的总乘客数投影为匿名类型,按乘客数降序排序后取第一个,再获取对应的航班对象。
处理并列最多的情况
如果需要获取所有乘客数量并列最多的航班:
// 先计算所有航班的乘客数并缓存 var flightPassengerCounts = _flights .Select(f => new { Flight = f, TotalPassengers = f.Bookings.Sum(b => b.Passengers.Count()) }) .ToList(); if (!flightPassengerCounts.Any()) { // 处理_flights为空集合的场景,比如返回空列表或抛出提示 return new List<Flight>(); } // 获取最大乘客数 var maxPassengerCount = flightPassengerCounts.Max(x => x.TotalPassengers); // 筛选出所有达到最大乘客数的航班 var topFlights = flightPassengerCounts .Where(x => x.TotalPassengers == maxPassengerCount) .Select(x => x.Flight) .ToList();
内容的提问来源于stack exchange,提问作者Denis Vercruysse
相关产品推荐
相关产品推荐

