7

我有以下课程。

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 循环进行迭代。我能以有效的方式做到这一点吗?

4

3 回答 3

19

使用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);
于 2013-01-28T13:53:02.313 回答
2
HotelRooms.Max (r => r.RoomPriceDetails.AverageNightlyRate );
于 2013-01-28T13:56:01.873 回答
1

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

与其直接在我们的Where语句返回的集合上调用 Min 或 Max ,我们可以Select()得到我们感兴趣的属性列表。然后我们可以滑入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.
于 2019-08-01T14:32:16.613 回答