2010-06-16 18 views
5

Estoy utilizando linqtosql y dentro de la consulta linq, traté de convertir la columna de tipo de fecha y hora a una cadena como 'dd-MM-aa'. Sin embargo, tengo el error de la siguiente manera:Cómo convertir datetime a string en linqtosql?

NotSupportedException: Método 'System.String ToString (System.String)' no tiene traducción apoyado a SQL.

siguiente es mi LINQ consulta:

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

¿Por qué necesita el ToString? –

+0

La propiedad ColumnTimeForXCategory es un tipo de cadena para expresar el modo de fecha y hora más accesible. Quiero expresar la columna ColumnTime como '13 -06-2010 '. Es por eso que utilicé la propiedad ColumnTimeForXCategory. – Ray

Respuesta

0

Usted está analizando los DateTime cadenas en la propia expresión y el proveedor LINQ to SQL no pueden convertir el código C# en código T-SQL equivalente.

intentar algo como esto en su lugar:

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

Quiero convertir la columna de tipo de fecha y hora 'ColumnTime' a la columna de tipo de cadena 'ColumnTimeForXCategory'. Creo que has entendido mal. – Ray

0

Como se mencionó anteriormente, puede LINQ quiere traducir lo que está haciendo para SQL. Eso no es posible en este caso. Pero podrías transformarlo en una cadena antes de tu consulta y luego pasar la cadena a la expresión linq.

0

No haga que la base de datos realice el formateo de cadenas para la interfaz de usuario. Analizarlo en el lado del cliente.

1

Me tropecé con esta publicación por qué estaba buscando la misma respuesta. Esto es lo que finalmente descubrí que puedo hacer al mirar las propiedades del objeto date.

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

Puede utilizar string.Format que ToString() método para resolver tu problema Me gusta

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

Esto funcionó para mí, gracias! – gregtheross