在LINQ中返回null而不是默认值
我有LINQ查询,它必须检索一些DateTime值。 Somethimes我没有匹配,我必须为该DateTime值返回NULL而不是DateTime的默认值。
我怎样才能避免这种情况并返回NULL而不是默认值?
我的LINQ:
CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault()
在DefaultIfEmpty中我只能放置DateTime。
把它投射到DateTime?
这将导致DefaultIfEmpty
创建一个默认集合,如果集合为空,则该集合包含空值。
CreatedDate = ctaMatch .Select(d => (DateTime?)d.CreatedDate) .DefaultIfEmpty() .FirstOrDefault()
PS:可以省略DefaultIfEmpty
,因为它后跟FirstOrDefault
。
您可以使用空条件运算符 ?.
在托管您的日期属性的对象上:
DateTime? date = ctaMatch.FirstOrDefault()?.CreatedDate;
如果FirstOrDefault()
为您的集合返回null
,则null条件运算符将为CreatedDate
属性返回null
。
或者,您可以选择日期并将它们显式转换为Nullable
。
DateTime? date = ctaMatch.Select(d => (DateTime?)d.CreatedDate).FirstOrDefault();
…从而给它一个默认值null
。
替代语法…如果存在,则获取第First
元素; 否则使用null
:
DateTime? CreatedDate = ctaMatch.Any() ? ctaMatch.First().CreatedDate : (DateTime?)null;