1. ホーム
  2. c#

[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法

2022-03-18 18:43:34

質問

Nullable DateOfBirthプロパティを持つPersonオブジェクトを持っています。 LINQ を使用して Person オブジェクトのリストを照会し、最も古い/最も小さい DateOfBirth 値を持つオブジェクトを取得する方法はありますか?

まず、こんな感じです。

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

Null DateOfBirth値は、Minの検討対象から除外するためにDateTime.MaxValueに設定されます(少なくとも1つは指定のDOBを持っていると仮定します)。

しかし、私の場合は、firstBornDate を DateTime 値に設定するだけです。 私が取得したいのは、それに一致するPersonオブジェクトです。 このように、2つ目のクエリを書く必要があるでしょうか。

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

それとも、もっと無駄のないやり方があるのでしょうか?

どのように解決するのですか?

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