C# 如何返回与谓词匹配的第一项,或者如果不匹配,如何返回第一项?

C# 如何返回与谓词匹配的第一项,或者如果不匹配,如何返回第一项?,c#,linq,datetime,nullable,C#,Linq,Datetime,Nullable,我有一个非常简单的实体列表,它有一个可为空的DateTime属性。 e、 g 但是有没有一种方法可以在一个语句中实现这一点呢?试试这个 myentities.OrderBy(me=>me.Date.GetValueOrDefault(DateTime.MaxValue)).First(); 或者你可以折叠你的收藏 myentities.Aggregate((a, b) => b.Date.HasValue && (!a.Date.HasValue || a.Date

我有一个非常简单的实体列表,它有一个可为空的DateTime属性。 e、 g

但是有没有一种方法可以在一个语句中实现这一点呢?

试试这个

myentities.OrderBy(me=>me.Date.GetValueOrDefault(DateTime.MaxValue)).First();
或者你可以折叠你的收藏

myentities.Aggregate((a, b) => b.Date.HasValue && (!a.Date.HasValue || a.Date.Value > b.Date.Value) ? b : a);
试试这个

myentities.OrderBy(me=>me.Date.GetValueOrDefault(DateTime.MaxValue)).First();
或者你可以折叠你的收藏

myentities.Aggregate((a, b) => b.Date.HasValue && (!a.Date.HasValue || a.Date.Value > b.Date.Value) ? b : a);

除了评论中提供的答案之外,这在您的案例中也应该有效

var myEntity = myentities
   .OrderBy(me => me.Date ?? DateTime.MaxValue)
   .FirstOrDefault();

由于那些为空的将始终排序到后面,如果有带日期的,则将选择它们,否则将返回第一个带空日期的。

除了注释中提供的答案之外,这应该适用于您的情况

var myEntity = myentities
   .OrderBy(me => me.Date ?? DateTime.MaxValue)
   .FirstOrDefault();
myentities.Where(d=>d.Date!=null).OrderBy(d=>d.Date).Take(1).Concat(myentities.First()).First()
由于那些为空的将始终排序到后面,如果有带日期的,则将选择它们,否则将返回第一个带空日期的。

使用??接线员

myentities.Where(d=>d.Date!=null).OrderBy(d=>d.Date).Take(1).Concat(myentities.First()).First()
var myEntity = myentities.Where(me => me.Date != null).OrderBy(me => me.Date).FirstOrDefault()
   ?? myentities.First();
使用??接线员

var myEntity = myentities.Where(me => me.Date != null).OrderBy(me => me.Date).FirstOrDefault()
   ?? myentities.First();

在你的例子中,我找不到可为null的DateTime属性,它只是一个快速的伪代码,可以在不需要全部写出的情况下给出实体的概念。编辑以显示“DateTime?Date”
myentities.Where(me=>me.Date!=null)。OrderBy(me=>me.Date)。FirstOrDefault()??myentities.First()
没有单独的语句,只有一行:dHanks,把它作为答案,我会勾选:)在你的例子中,我找不到可为空的DateTime属性,这只是一个快速的伪代码,可以给出实体的概念,而不必全部写出。编辑以显示“DateTime?Date”
myentities.Where(me=>me.Date!=null)。OrderBy(me=>me.Date)。FirstOrDefault()??myentities.First()
没有单独的语句,但只有一行:DThanks,把它作为答案,我将勾选:)就像第一个选项一样…没有意识到您可以为…或默认部分指定值!因为第一个答案就是我实际使用的答案。就像第一个选项…没有意识到你可以为…或默认部分指定值!因为第一个答案是我实际使用的。