如何仅在结果不为 null 时才对 linq 子查询的结果执行运算符

本文关键字:结果 linq 查询 执行 运算符 何仅 null | 更新日期: 2023-09-27 18:35:20

我将把我的linq查询简化为:

var q = (from x in ...
select new 
{
 CustomDate = (from t in ....
                select new 
                {t.CreatedDate}).Max(cd=>cd.CreatedDate)
})

问题是如果子查询的结果为空,Max 就会爆炸。如何在子查询为空时分配可为空的日期,并在子查询中有数据时分配最大日期?(使自定义日期成为字符串并返回日期字符串也是一种选择)

如何仅在结果不为 null 时才对 linq 子查询的结果执行运算符

如果

TSource是引用类型(或者碰巧是Nullable<T>类型)并且源为空,则Enumerable.Max()方法将返回null。所以一个可能的选择是这样的:

let maxDate = (from t in ...
              select new { t.CreatedDate }).Max(cd => (DateTime?)cd.CreatedDate)
select new
{
    CustomDate = maxDate ?? DateTime.MaxValue
}

请注意,如果您不希望CustomDate Nullable<DateTime>,您当然可以在合并 null 后转换回所需的类型。