leo*_*ora 13 c# linq collections
我有一个对象列表,每个对象都有一个 ExpirationDate属性,类型为DateTime.我想检索列表中的最新日期.有没有一种优雅的方式通过LINQ做到这一点?
就像是:
DateTime latestDate = myCollection.Where(r=>r.ExpirationDate.HasValue).MaxDate(r=>r.ExpirationDate.Value);
Run Code Online (Sandbox Code Playgroud)
J. *_*een 23
DateTime? latestDate = myCollection.Max(r => r.ExpirationDate);
Run Code Online (Sandbox Code Playgroud)
Intellisense应该给你Max()方法.=)
现在,如果你必须将它分配给DateTime,我会考虑这样做:
DateTime latestDate = myCollection.Where(r => r.ExpirationDate.HasValue)
.Max(r => r.ExpirationDate)
.Value;
Run Code Online (Sandbox Code Playgroud)
这不会涵盖空集合或仅具有空ExpirationDates的集合的情况.
根据您之前的逻辑,检查
myCollection.Any(r => r.ExpirationDate.HasValue)
Run Code Online (Sandbox Code Playgroud)
在尝试分配值之前可能是个好主意.
你快到了.使用Max:
DateTime? biggest = myCollection.Max(r=>r.ExpirationDate);
Run Code Online (Sandbox Code Playgroud)
如果所有到期日期为空或集合为空,则结果为空,否则为最大日期.
正如你对J. Sheens的答案所评论的那样,你想要一个DateTime作为结果,你需要对任何空集合做一些事情或者没有任何具有值的项目,你可以用
DateTime biggest=myCollection.Max(r=>r.ExpirationDate) ?? DateTime.MinValue
Run Code Online (Sandbox Code Playgroud)
这将DateTime.MinValue
在前一个示例中为您提供而不是null(它还具有使用any
它迭代集合一次的子句的优势).我选择MinValue
了一个例子.你可以使用自己的生日.
使用DateTime?更好,因为它允许你使用null表示它的意思 - 未定义,因为它MinValue
可能是列表中的有效项.