如何将datetime转换为linq中的字符串到sql?

时间:2010-06-16 10:38:57

标签: linq-to-sql

我正在使用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) }

6 个答案:

答案 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执行字符串格式化。在客户端解析它。