Значение 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? и не имеет проблем с обработкой нулей.
Ответы
Ответ 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, сценарий никогда не появлялся.