一尘不染

如何使用LINQ选择具有最小或最大属性值的对象

c#

我有一个具有Nullable
DateOfBirth属性的Person对象。有没有一种方法可以使用LINQ来查询Person对象列表中最早/最小的DateOfBirth值。

这是我开始的:

var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue));

空的DateOfBirth值设置为DateTime.MaxValue以便将它们排除在Min考虑之外(假设至少一个具有指定的DOB)。

但是对我来说,所有要做的就是将firstBornDate设置为DateTime值。我想要得到的是与此匹配的Person对象。我是否需要这样编写第二个查询:

var firstBorn = People.Single(p=> (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate);

还是有一种更精简的方法?


阅读 433

收藏
2020-05-19

共1个答案

一尘不染

People.Aggregate((curMin, x) => (curMin == null || (x.DateOfBirth ?? DateTime.MaxValue) <
    curMin.DateOfBirth ? x : curMin))
2020-05-19