Подтвердить что ты не робот

Значение Null не может быть назначено - запрос LINQ

У меня есть следующий запрос LINQ:

DataClassesDataContext dc = new DataClassesDataContext(); 
var query = from contact in dc.Contacts
            select new
            {
                ContactId = contact.ContactId,
                LastName = contact.LastName,
                FirstName = contact.FirstName,
                Addresses = contact.Addresses,
                Phones = contact.Phones,
                DOB = contact.BirthDate,
                LastNote = contact.Notes.Max(n => n.Created), //this line causes the error
                Status = contact.ContactStatus.ContactStatusName,
                EmailAddress = contact.Emails
            };

Строка, в которой я получаю максимальную созданную дату для коллекции заметок, вызывает следующее исключение:

Исключение: нулевое значение не может быть присвоено член с типом System.DateTime, который - тип значения, не допускающего значения NULL.

Как написать запрос, чтобы разрешить нулевые значения в поле LastNote? Поле DOB определяется как DateTime? и не имеет проблем с обработкой нулей.

4b9b3361

Ответ 1

Думаю, я понял это.

Если я укажу максимальное значение ноты на значение NULL DateTime, похоже, это исключает исключение. Для меня изменилось следующее:

LastNote = (Nullable<DateTime>)contact.Notes.Max(n => n.Created)

Как указывали другие, он также может быть написан с использованием сокращенной нотации для NULL DateTime следующим образом:

LastNote = (DateTime?) contact.Notes.Max(n => n.Created)

Ответ 2

Перепишите эту строку как:

LastNote = (DateTime?) contact.Notes.Max(n => n.Created),

Ответ 3

LastNote = contact.Notes.Max(n => (DateTime?)n.Created)

Не удалось найти это в сети, поэтому я надеюсь, что это поможет другим.

Ответ 4

В VB есть что-то вроде:

LastNote = CType(contact.Notes.Max(n => n.Created), Global.System.Nullable(Of Date))

Я думаю...

Ответ 5

Вы могли бы это сделать, или вы могли бы изменить схему базы данных так, чтобы столбец "Создан" не допускал нулей.

Сценарий возникает, потому что одна из строк возвращается с нулевым значением для Create. Если db не разрешал null, сценарий никогда не появлялся.