使用LINQ獲取具有極值屬性的對象
LINQ中的Min()
和Max()
方法可以用來查找特定屬性值最小或最大的對象。但是,當處理可為空的屬性時,可能會出現一些額外的考慮。
確定最早出生日期的人
假設您有一個Person對象的列表,其中包含一個可以為空的DateOfBirth
屬性。您希望使用LINQ查找最早出生日期的人。
一種方法是使用Min()
方法獲取最小的DateOfBirth
值:
<code class="language-csharp">var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue));</code>
但是,這只會提供日期本身。如果您想要相應的Person對象,您可以進行另一個查詢:
<code class="language-csharp">var firstBorn = People.Single(p => (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate);</code>
更高效的解決方案
與其使用兩個查詢,不如使用Aggregate()
方法將操作組合起來:
<code class="language-csharp">var firstBorn = People.Aggregate((curMin, x) => (curMin == null || (x.DateOfBirth ?? DateTime.MaxValue) < (curMin.DateOfBirth ?? DateTime.MaxValue)) ? x : curMin);</code>
這段代碼迭代集合,將當前最小值存儲在curMin
中。當遇到DateOfBirth
較早的Person對象時,它將替換當前最小值。結果是具有最早出生日期的Person對象。
以上是如何使用LINQ有效地找到最早出生日期的人?的詳細內容。更多資訊請關注PHP中文網其他相關文章!