В основном мне нужен эквивалент T-SQL CONVERT(NVARCHAR(10), datevalue, 126)
Я попробовал:
from t in ctx.table select t.Date.ToString("yyyy-MM-dd")
но это выдает не поддерживаемое исключение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)
броски не поддерживаемое исключение также).
Есть ли причина выполнить преобразование на стороне базы данных? Всякий раз, когда я сталкиваюсь с подобной ситуацией, я просто позволяю базе данных предоставлять мне необработанные данные, а затем выполняю обработку и манипуляции внутри приложения. В зависимости от объема запросов к серверу базы данных и размера набора результатов я не хочу связывать время обработки и ответа на преобразование данных, которое может обрабатывать клиент.
Предполагая, что 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 и выполнить непосредственно в базе данных.