Lambda查询返回Date的Max()或者在C#中返回null

时间:2017-11-30 20:43:15

标签: c# lambda

我需要Lambda查询来过滤列表中的日期并返回最大日期。如果列表不满足过滤器,则应返回空值。这是我的代码,需要更短的版本 - >

var a = Dates.Where(x => x >= DateTime.Now).Select(x => x);
if(a.Count > 0)
{
  return a.Max();
}
else return null;

返回的值是在DateTime中?显示错误的格式"嵌入式语句不能是声明或带标签的语句"。

1 个答案:

答案 0 :(得分:1)

var Dates = new List<DateTime>();

DateTime? max = Dates.Where(x => x >= DateTime.Now)
    .Select(x => (DateTime?) x)
    .DefaultIfEmpty(null)
    .Max();

Console.WriteLine(max == null ? "null" : "not null");

如果您的列表由Nullable<DateTime>组成,则需要以某种方式将结果转换为DateTime

编辑:正如评论中提到的@RogerStewart,要执行演员表,您可以使用Cast<DateTime?>()代替Select语句。