我有以下类。
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.