具有空对象和 属性 的 Linq Max

Linq Max with null object and property

我有航班对象list.In这个列表每个航班对象都有段对象list.Every这个段对象列表中的项目有FareDisplayInfos对象list.EveryFareDisplayInfos对象有属性这样的作为总票价

我想得到 Max totalFare.So 我是这样编码的。

Model.Flights.Max(a => a.FlightSegments.FirstOrDefault().FareDisplayInfos.Max(c => c.TotalFare));

但它给出零,因为有些 totalFare 为空,有些值为零。 如何消除空对象或零对象 Note:Not 只有 TotalFare 为零或 null.Somet 次 FareDisplayInfos 等对象为空

已编辑

在 tim-schmelter 的帮助下,我对此进行了编码,但它将最大值设置为 0(零) 尽管此 (LeaveRouteListAcer) 中有 43 个项目并且此项目具有 FlightSegments 该段具有许多 FareDisplayInfos 并且 FareDisplayInfos 具有总票价(有些票价是 0 有些是 90....)

 var maxTotalFare = hModel.LeaveList
.SelectMany(f => f.FlightSegments
    .Where(fs => fs != null && fs.FareDisplayInfos != null)
    .Select(fs => fs.FareDisplayInfos.Max(fdi => fdi.TotalFare))
    .DefaultIfEmpty(0))
.Max();

用三元运算符这样检查就可以了

Model.Flights.Max(a => a.FlightSegments == null 
? 0
: a.FlightSegments.FirstOrDefault().FareDisplayInfos == null
   ? 0
   : a.FlightSegments.FirstOrDefault().FareDisplayInfos.Max(c => c.TotalFare == null ? 0 : c.TotalFare)
);

假设 TotalFare 可以为空:

var maxTotalFare = Model.Flights
    .SelectMany(f => f.FlightSegments
        .Where(fs => fs != null && fs.FareDisplayInfos != null)
        .Select(fs => fs.FareDisplayInfos.Max(fdi => fdi.TotalFare ?? 0))
        .DefaultIfEmpty(0))
    .Max();