Возвращать значение 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;