获取对象列表中的最大值



我有以下类。

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

酒店客房列表有 10 个项目。我想找到平均每晚房价的最大值。

我正在使用 for 循环来迭代.我可以以有效的方式做到这一点吗?

Use 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);
HotelRooms.Max (r => r.RoomPriceDetails.AverageNightlyRate );

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

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

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.

相关内容

  • 没有找到相关文章

最新更新