Это одна из точек, где LINQ to SQL - это утечка абстракции.Семантика функции Max()
в C # - выбросить InvalidOperationException
, если в последовательности нет элементов.Семантика функции SQL MAX()
- возвращать NULL
.Код C # компилируется так, как будто семантика C # соблюдается, но код никогда не выполняется как код C #.Он переведен на SQL, где правила семантики SQL.
Чтобы справиться с этим, вам нужно решить, что вы хотите, когда нет соответствующих элементов.Если вы хотите получить значение null
, явно объявите переменную, допускающую значение NULL, и добавьте дополнительное приведение к DateTime?
, чтобы сообщить LINQ to SQL, что null
может быть возвращено.
DateTime? bd = (from d in baza.hpurs
where d.userID == userID && d.date !=null
select (DateTime?)d.date).Max();