Почему я не могу преобразовать значение DateTime, допускающее значение NULL, как строку в запросе LinQ?

Я пытаюсь взять значение DateTime, и если оно не является null возвращает короткую временную строку. Мой запрос выглядит так: (TimeIn НЕ NULLABLE, тогда как TimeOut равен NULLABLE)

    var times = from t in db.TimePostings
                where t.MemberID == member.MemberID
                select new
                {
                    Date = t.TimeIn.ToShortDateString(),
                    TimeIn = t.TimeIn.ToShortTimeString(),
                    TimeOut = t.TimeOut.HasValue ? t.TimeOut.Value.ToShortTimeString() : "-------"
                };
gvTimePostings.DataSource = times;
gvTimePostings.DataBind();

, но это не удается, когда я пытаюсь привязать данные с ошибкой:

Не удалось перевести выражение 'Таблица (TimePosting). Где (t => (t.MemberID == Invoke (value (System.Func 1 [System.String])))). Выберите (t => новый <> f__AnonymousType8 4 (Date = t.TimeIn.ToShortDateString (), TimeIn = t.TimeIn.ToShortTimeString (), TimeOut = IIF (t.TimeOut.HasValue, (t.TimeOut ?? {{1 }} Invoke (value (System.Func`1 [System.DateTime]))). ToShortTimeString (), "-------"), Hours = "")) 'в SQL и не может рассматривать его как локальное выражение .

Я также получаю аналогичную ошибку, если пытаюсь использовать:

TimeOut = t.TimeOut.HasValue ? Convert.ToDateTime(t.TimeOut).ToShortTimeString() : "-------"

, однако, если я изменяю свойство TimeOut на:

TimeOut = t.TimeOut.HasValue ? t.TimeOut.ToString() : "-------",

, оно работает нормально, но не форматирует время так, как мне нужно (shortTimeString).

что это с тобой?

8
задан matthew_360 14 November 2011 в 22:08
поделиться