Возвращать значение null вместо значения по умолчанию в LINQ
У меня есть запрос LINQ, который должен получить некоторое значение DateTime. Иногда у меня нет соответствия, и мне нужно вернуть NULL для этого значения DateTime вместо значения по умолчанию для DateTime.
Как я могу избежать этого и вернуть значение NULL вместо defaul?
Мой LINQ:
CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault()
В DefaultIfEmpty я могу поставить только DateTime.
Ответы
Ответ 1
Включить его в DateTime?
что приведет к тому, что DefaultIfEmpty
создаст коллекцию по умолчанию, содержащую нулевое значение, если коллекция пуста.
CreatedDate = ctaMatch
.Select(d => (DateTime?)d.CreatedDate)
.DefaultIfEmpty()
.FirstOrDefault()
PS: DefaultIfEmpty
может быть опущен, поскольку он следует за FirstOrDefault
.
Ответ 2
Вы можете использовать оператор с нулевым условием, ?.
на объекте, в котором размещается ваше свойство даты:
DateTime? date = ctaMatch.FirstOrDefault()?.CreatedDate;
Если FirstOrDefault()
возвращает null
для вашей коллекции, оператор с нулевым условием возвращает null
для свойства CreatedDate
.
Кроме того, вы можете выбрать свои даты и явно Nullable<DateTime>
их на Nullable<DateTime>
.
DateTime? date = ctaMatch.Select(d => (DateTime?)d.CreatedDate).FirstOrDefault();
... тем самым давая ему значение по умолчанию null
.
Ответ 3
Альтернативный синтаксис... получить First
элемент, если Any
существует; в противном случае используйте null
:
DateTime? CreatedDate = ctaMatch.Any() ? ctaMatch.First().CreatedDate : (DateTime?)null;