Как вы можете объединить datetimeoffset в Linq to SQL?

У меня есть запрос Linq, который заказывает дату и время. Цель состоит в том, чтобы вверху был тот, который имеет значение NULL, за которым следуют самые последние, 2-е последние и так далее. Я начал с этого.

orderby item.Date descending

Делая это таким образом, NULL идут вниз. Поэтому я изменил его на это.

orderby (item.Date.HasValue ? item.Date.Value.Ticks : long.MaxValue) descending

Это работает для запросов в памяти, но не переводится в SQL. Моя последняя попытка такова.

orderby (item.Date.HasValue ? item.Date : new DateTimeOffset(new DateTime(9999, 09, 31))) descending

Проблема здесь в том, что максимальное смещение даты и времени не совпадает между SQL и С#. Я чувствую, что мне не хватает очевидного простого решения.

Любой ввод?


person Anthony D    schedule 09.10.2009    source источник


Ответы (2)


Вы пробовали оператор объединения С#?

orderby (item.Date ?? DateTimeOffset.MaxValue) descending
person dahlbyk    schedule 10.10.2009
comment
Да, я почти уверен, что это не сработает. Я думаю, вы можете сделать orderby (item.Value ?? DateTimeOffset.MaxValue) по убыванию, на самом деле он не возвращает DateTimeoffset, он возвращает System.Nullable‹System. ДатаВремяСмещение› - person Anthony D; 12.10.2009

При использовании даты и времени я заметил, что вы не можете использовать DateTime.Max и передать это в SQL. Кажется, максимальная дата и время в SQL ниже, чем в С#. Я предположил, что то же самое применяется в DateTimeOffset. Это не похоже на правду. Казалось бы, этот код работает.

orderby (item.Date.HasValue ? item.Date : DateTimeOffset.MaxValue) descending
person Anthony D    schedule 09.10.2009