Я использую linqtosql и в запросе linq, я пытался преобразовать столбец типа даты и времени для строкового представления как 'dd-MM-yy'. Однако я получил ошибку как следующее:
NotSupportedException: Метод 'Система. Представьте ToString в виде строки (Система. Строка)', не имеет никакого поддерживаемого перевода в SQL.
следующее является моим запросом linq:
from ffv in Flo_flowsheet_values
where ffv.Flowsheet_key == 2489
&& ffv.Variable_key == 70010558
&& ffv.Status == 'A'
&& ffv.Column_time >= DateTime.ParseExact("2010-06-13 00:00", "yyyy-MM-dd HH:mm", null)
&& ffv.Column_time <= DateTime.ParseExact("2010-06-13 22:59", "yyyy-MM-dd HH:mm", null)
select new {
ColumnTime = ffv.Column_time
,ColumnTimeForXCategory = ffv.Column_time.Value.ToString("dd-MM-yy") ***====> this statement invoke error***
,BTValue = Convert.ToDouble( ffv.Value) }
Вы анализируете строки DateTime
в самом выражении, и поставщик LINQ to SQL не может преобразовать этот код C # в эквивалентный код T-SQL.
Попробуйте вместо этого что-нибудь вроде этого:
DateTime start
= DateTime.ParseExact(
"2010-06-13 00:00",
"yyyy-MM-dd HH:mm",
CultureInfo.InvariantCulture);
DateTime end
= DateTime.ParseExact(
"2010-06-13 22:59",
"yyyy-MM-dd HH:mm",
CultureInfo.InvariantCulture);
from ffv in Flo_flowsheet_values
where ffv.Flowsheet_key == 2489
&& ffv.Variable_key == 70010558
&& ffv.Status == 'A'
&& ffv.Column_time >= start
&& ffv.Column_time <= end
select new
{
ColumnTime = ffv.Column_time,
ColumnTimeForXCategory = ffv.Column_time.Value.ToString("dd-MM-yy")
BTValue = Convert.ToDouble( ffv.Value)
};
Как упоминалось выше, вы можете linq переводить то, что вы делаете, в sql. В данном случае это невозможно. Но вы можете преобразовать его в строку перед запросом, а затем передать строку в выражение linq.
Не заставляйте базу данных форматировать строки для пользовательского интерфейса. Разбирайте ее на стороне клиента.