我有LINQ查询,必须检索一些DateTime值。有些东西我没有匹配,我必须为DateTime值返回NULL而不是DateTime的默认值。
如何避免这种情况并返回NULL而不是默认值?
我的LINQ:
CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault()
在DefaultIfEmpty中,我只能放置DateTime。
答案 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;