我正在使用linqtosql并在linq查询中,我试图将datetime类型列转换为字符串,如'dd-MM-yy'。 但是,我收到了如下错误:
NotSupportedException:方法 “System.String ToString(System.String)'没有 支持转换为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) }
答案 0 :(得分:13)
您可以使用string.Format
而不是ToString()
方法来解决问题。
像
ColumnTimeForXCategory = string.Format("{0:dd-MM-yy}",ffv.Column_time.Value)
答案 1 :(得分:2)
我偶然发现了这个帖子,为什么我一直在寻找相同的答案。这是我最终发现的,我可以通过查看日期对象的对象属性来做。
CreatedDateTime =
modelChartArea.CreatedDateTime.Month + "/" +
modelChartArea.CreatedDateTime.Day + "/" +
modelChartArea.CreatedDateTime.Year
答案 2 :(得分:1)
这可能很晚但仍然......尝试使用.AsEnumerable()......我也不知何故偶然发现了这个问题然后我发现了这个: http://forum.linqpad.net/discussion/58/comparing-dates-in-linqpad
答案 3 :(得分:0)
您正在解析表达式本身中的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)
};
答案 4 :(得分:0)
如上所述,你可以想要将你正在做的事情翻译成sql。 在这种情况下,这是不可能的。但是您可以在查询之前将其转换为字符串,然后将字符串传递给linq表达式。
答案 5 :(得分:0)
不要让数据库为UI执行字符串格式化。在客户端解析它。