Формат Linq 2 Sql DateTime для строкового представления yyyy-MM-dd

В основном мне нужен эквивалент T-SQL CONVERT(NVARCHAR(10), datevalue, 126)

Я попробовал:

  1. from t in ctx.table select t.Date.ToString("yyyy-MM-dd") но это выдает не поддерживаемое исключение
  2. from t in ctx.table select "" + t.Date.Year + "-" + t.Date.Month + "-" + t.Date.Day но я не думаю, что это - применимое решение, потому что я, возможно, должен был бы смочь изменить формат.

Единственная опция, которую я вижу, состоит в том, чтобы использовать Convert.ToString(t.Date, FormatProvider), но мне нужен поставщик формата, и я не уверен, что это работает также

FormatProvider не работает, Строка. Формат не работает (string.Format("{0:yyyy-MM-dd}", t.Date) броски не поддерживаемое исключение также).

11
задан Bogdan Maxim 11 March 2010 в 20:48
поделиться

2 ответа

Есть ли причина выполнить преобразование на стороне базы данных? Всякий раз, когда я сталкиваюсь с подобной ситуацией, я просто позволяю базе данных предоставлять мне необработанные данные, а затем выполняю обработку и манипуляции внутри приложения. В зависимости от объема запросов к серверу базы данных и размера набора результатов я не хочу связывать время обработки и ответа на преобразование данных, которое может обрабатывать клиент.

4
ответ дан 3 December 2019 в 06:46
поделиться

Предполагая, что t.Date допускает значение NULL ( DateTime? ), это может быть проблемой, попробуйте использовать:

from t in ctx.table select (t.HasValue ? t.Date.Value.ToString("yyyy-MM-dd") : string.Empty );

Изменить: Хорошо, вторая попытка ...

Проблема заключается в том, что при преобразовании в SQL он пытается преобразовать .ToString () в представление SQL и терпит неудачу. Таким образом, если вы сделаете следующее, это должно сработать:

(from t in ctx.table select t.Date).ToList().Select(d => d.ToString("yyyy-MM-dd"))

или

(from t in ctx.table select t.Date).AsEnumerable().Select(d => d.ToString("yyyy-MM-dd"))

AsEnumerable () преобразует ранее использованные IQueryable в IEnumerable , тем самым останавливая генерацию SQL (в случае Linq to SQL) или любое другое преобразование поставщиком, реализующим конкретный IQueryable (например, Linq to SQL Provider).

Обратите внимание: перед вызовом AsEnumerable () вы должны выполнить все действия, которые вы хотите преобразовать в SQL и выполнить непосредственно в базе данных.

6
ответ дан 3 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: