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

时间:2014-08-28 00:54:27

标签: c# linq

我有LINQ查询,必须检索一些DateTime值。有些东西我没有匹配,我必须为DateTime值返回NULL而不是DateTime的默认值。

如何避免这种情况并返回NULL而不是默认值?

我的LINQ:

CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault()

在DefaultIfEmpty中,我只能放置DateTime。

3 个答案:

答案 0 :(得分:14)

将其强制转换为DateTime?,这将导致DefaultIfEmpty创建一个默认集合,如果集合为空,则该集合包含空值。

CreatedDate = ctaMatch
    .Select(d => (DateTime?)d.CreatedDate)
    .DefaultIfEmpty()
    .FirstOrDefault()

PS: DefaultIfEmpty可以省略,因为它后跟FirstOrDefault

答案 1 :(得分:12)

您可以在托管日期属性的对象上使用null-conditional operator?.

DateTime? date = ctaMatch.FirstOrDefault()?.CreatedDate;

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

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

DateTime? date = ctaMatch.Select(d => (DateTime?)d.CreatedDate).FirstOrDefault();

...从而为其提供默认值null

答案 2 :(得分:4)

替代语法...如果First存在,则获取Any元素;否则使用null

DateTime? CreatedDate = ctaMatch.Any() ? ctaMatch.First().CreatedDate : (DateTime?)null;