Linq Max具有null对象和属性

时间:2015-07-13 12:47:50

标签: asp.net-mvc linq linq-to-sql linq-to-entities

我有航班对象列表。在此列表中,每个航班对象都有分段对象列表。此分段对象列表中的每个项目都有FareDisplayInfos对象列表。每个FareDisplayInfos对象都具有诸如totalFare

之类的属性

我想获得Max totalFare。所以我这样编码。

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

但它给出零,因为有些totalFare为null且某些值为零。 如何消除null或零对象 注意:不仅TotalFare为零或null.Sayt次对象(如FareDisplayInfos)为空

被修改

使用tim-schmelter帮助我编码,但它将max设置为0(零) 虽然这个项目中有43项(LeaveRouteListAcer),但这个项目有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();

2 个答案:

答案 0 :(得分:0)

用三元运算符来区分它。

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)
);

答案 1 :(得分:0)

这应该有用,假设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();