获得最大值对象列表中的值

时间:2013-01-28 13:51:49

标签: c# linq

我有以下课程。

public class PriceDetails 
{
  public float AverageNightlyRate { get; set; }
}

public class RoomContainer
{
  public PriceDetails RoomPriceDetails { get; set; }
  public string PromotionDescription { get; set; }
}    

public List<RoomContainer> HotelRooms { get; set; }

列表 HotelRooms 有10个项目。 我想找到 AverageNightlyRate 的最大值。

我正在使用for循环进行迭代。 我能以有效的方式做到吗?

3 个答案:

答案 0 :(得分:14)

使用Enumerable.Max

var maxAverageRate = HotelRooms.Max(r => r.RoomPriceDetails.AverageNightlyRate)

如果RoomPriceDetails可以是null,那么:

var maxAverageRate = HotelRooms.Where(r => r.RoomPriceDetails != null)
                               .Max(r => r.RoomPriceDetails.AverageNightlyRate);

var maxAverageRate = HotelRooms.Select(room => room.RoomPriceDetails)
                               .Where(price => price != null)
                               .Max(price => price.AverageNightlyRate);

答案 1 :(得分:1)

HotelRooms.Max (r => r.RoomPriceDetails.AverageNightlyRate );

答案 2 :(得分:0)

使用Min()Max()时要牢记您的设计可能要考虑实现DefaultIfEmpty().,如果.Where子句消除了所有元素,我们将调用Min()Max()时收到“序列不包含任何元素” 错误。

我们可以Where感兴趣的属性列表,而不是直接在我们的Select()语句返回的集合上调用Min或Max。然后可以插入DefaultIfEmpty。在Min()上调用Max()DefaultIfEmpty确保我们可以使用的集合。

var maxRate = HotelRooms.Where(r => r.RoomPriceDetails != null)
                        .Select(r => r.RoomPriceDetails.AverageNightlyRate)
                        .DefaultIfEmpty() // Now even if our where causes an empty selection list we will return DefaultIfEmpty.
                        .Max(); // Now we always have a gaurenteed value for max.