![](/img/trans.png)
[英]How do I get the object with the second latest date from a collection of objects
[英]How do I get the latest date from a collection of objects using LINQ?
我有一個對象列表,每個 object 都有一個類型為DateTime的ExpirationDate屬性。 我想檢索列表中的最新日期。 有沒有通過 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.