使用LINQ获取具有极值属性的对象
LINQ中的Min()
和Max()
方法可以用来查找特定属性值最小或最大的对象。但是,当处理可为空的属性时,可能会出现一些额外的考虑。
确定最早出生日期的人
假设您有一个Person对象的列表,其中包含一个可以为空的DateOfBirth
属性。您希望使用LINQ查找最早出生日期的人。
一种方法是使用Min()
方法获取最小的DateOfBirth
值:
var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue));
但是,这只会提供日期本身。如果您想要相应的Person对象,您可以进行另一个查询:
var firstBorn = People.Single(p => (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate);
更高效的解决方案
与其使用两个查询,不如使用Aggregate()
方法将操作组合起来:
var firstBorn = People.Aggregate((curMin, x) => (curMin == null || (x.DateOfBirth ?? DateTime.MaxValue) < (curMin.DateOfBirth ?? DateTime.MaxValue)) ? x : curMin);
这段代码迭代集合,将当前最小值存储在curMin
中。当遇到DateOfBirth
较早的Person对象时,它将替换当前最小值。结果是具有最早出生日期的Person对象。
以上是如何使用LINQ有效地找到最早出生日期的人?的详细内容。更多信息请关注PHP中文网其他相关文章!