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.
精彩评论