在LINQ中返回null而不是默认值

kat*_*330 11 c# linq

我有LINQ查询,它必须检索一些DateTime值.Somethimes我没有匹配,我必须为该DateTime值返回NULL而不是DateTime的默认值.

我怎样才能避免这种情况并返回NULL而不是默认值?

我的LINQ:

CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)

在DefaultIfEmpty中,我只能放置DateTime.

Yul*_*dra 15

如果集合为空DateTime?,则将其强制转换为将导致DefaultIfEmpty创建包含空值的默认集合.

CreatedDate = ctaMatch
    .Select(d => (DateTime?)d.CreatedDate)
    .DefaultIfEmpty()
    .FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)

PS:DefaultIfEmpty可以省略,因为它的后面FirstOrDefault.


I a*_*ica 12

您可以使用空条件运算符,?.承载您的日期属性的对象:

DateTime? date = ctaMatch.FirstOrDefault()?.CreatedDate;
Run Code Online (Sandbox Code Playgroud)

如果您的集合FirstOrDefault()返回null,则null条件运算符将返回nullCreatedDate属性.

或者,您可以选择日期并明确地将其投射到Nullable<DateTime>.

DateTime? date = ctaMatch.Select(d => (DateTime?)d.CreatedDate).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

...从而给它一个默认值null.