簡體   English   中英

如何使用 LINQ 從對象集合中獲取最新日期?

[英]How do I get the latest date from a collection of objects using LINQ?

我有一個對象列表,每個 object 都有一個類型為DateTimeExpirationDate屬性。 我想檢索列表中的最新日期。 有沒有通過 LINQ 做到這一點的優雅方法?

就像是:

DateTime latestDate =  myCollection.Where(r=>r.ExpirationDate.HasValue).MaxDate(r=>r.ExpirationDate.Value);
DateTime? latestDate = myCollection.Max(r => r.ExpirationDate);

Intellisense 應該為您提供 Max() 方法。 =)


現在,如果您必須將其分配給 DateTime,我會考慮這樣做:

DateTime latestDate = myCollection.Where(r => r.ExpirationDate.HasValue)
                                  .Max(r => r.ExpirationDate)
                                  .Value;

這將不包括空集合或僅具有 null ExpirationDates 的集合的情況。


根據您之前的邏輯,檢查

myCollection.Any(r => r.ExpirationDate.HasValue)

在嘗試分配值之前可能是一個好主意。

你快到了。 使用最大值:

DateTime? biggest = myCollection.Max(r=>r.ExpirationDate);

如果所有到期日期都是 null 或集合為空,您將得到 Null 作為結果,否則為最大日期。

正如您對J. Sheens 的回答所評論的那樣,您想要一個 DateTime 作為結果,您需要對任何空集合或沒有值的項目做一些事情,您可以這樣做

DateTime biggest=myCollection.Max(r=>r.ExpirationDate) ?? DateTime.MinValue

這將為您提供DateTime.MinValue而不是我之前示例中的空值(與使用any子句相比,它還具有迭代集合一次的優勢)。 我以MinValue為例。 你可以使用你自己的abitary date。

使用日期時間? 更好,因為它允許您使用 null 的含義 - 未定義為MinValue可能是您列表中的有效項目。

只需確保在分配.ExpriationDate之前進行 NullReference 檢查:

DateTime maxDate = myCollection.OrderByDescending(o => o.ExpirationDate).Take(1).FirstOrDefault().ExpirationDate;

Bob Vale的想法是正確的

DateTime maxDate = objL.Max(o => o.ExpirationDate);

按日期降序對列表進行排序並取第一個(必要時進行投影)。

var latestExpirationDate = myCollection
    .Where(item => item.ExpirationDate.HasValue)
    .OrderByDescending(item => item.ExpirationDate)
    .Select(item => item.ExpirationDate) // DateTime?
    .FirstOrDefault();
if (latestExpirationDate != null)
{
    // do something with the value stored in latestExpirationDate
}

在我寫這篇文章時,我的印象是Max()方法只對數字類型(即 int、short、decimal 等)進行操作。 它似乎也適用於DateTime對象。 所以這也可以工作:

var expiredItems = myCollection
    .Where(item => item.ExpirationDate.HasValue);
if (expiredItems.Any())
{
    var latestExpirationDate = expiredItems.Max(item => item.ExpirationDate.Value);
    // do something with latestExpirationDate
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM