开发者

How to convert datetime to string in linqtosql?

I am using linqtosql and inside of linq query, I tried to convert datetime type column to string like 'dd-MM-yy'. However, I got error as following :

NotSupportedException: Method 'Sy开发者_Python百科stem.String ToString(System.String)' has no supported translation to SQL.

following is my linq query:

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) }


You can use string.Format than ToString() method to solve your problem. Like

ColumnTimeForXCategory = string.Format("{0:dd-MM-yy}",ffv.Column_time.Value) 


I stumbled across this post why I was looking for the same answer. Here is what I eventually discovered I can do from looking at the object properties of the date object.

CreatedDateTime = 
   modelChartArea.CreatedDateTime.Month + "/" + 
   modelChartArea.CreatedDateTime.Day + "/" + 
   modelChartArea.CreatedDateTime.Year


This maybe late but still....try using .AsEnumerable()...I also somehow stumbled on this problem then I found this: http://forum.linqpad.net/discussion/58/comparing-dates-in-linqpad


You are parsing the DateTime strings in the expression itself and the LINQ to SQL provider cannot translate that C# code into equivalent T-SQL code.

Try something like this instead:

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)
};


As mentioned above, you can linq wants to translate what you are doing to sql. Thats not possible in this case. But you could transform it to a string before your query and then pass the string into the linq expression.


Don't make the database do string formatting for the UI. Parse it on the client side.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜