我有以下课程。
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循环进行迭代。 我能以有效的方式做到吗?
答案 0 :(得分:14)
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.