2010-06-16 5 views
5

J'utilise linqtosql et à l'intérieur de linq query, j'ai essayé de convertir la colonne datetime type en chaîne comme 'dd-MM-yy'. Cependant, je suis erreur suivante:Comment faire pour convertir datetime en chaîne dans linqtosql?

NotSupportedException: Méthode 'System.String ToString (System.String)' n'a pas de traduction pris en charge à SQL.

Voici ma requête 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

Pourquoi avez-vous besoin de ToString? –

+0

La propriété ColumnTimeForXCategory est un type de chaîne pour exprimer la date de manière plus lisible. Je veux exprimer la colonne ColumnTime comme '13 -06-2010 '. C'est pourquoi j'ai utilisé la propriété ColumnTimeForXCategory. – Ray

Répondre

0

Vous analysez les DateTime chaînes dans l'expression elle-même et le fournisseur LINQ to SQL ne peut pas traduire ce code C# en équivalent de code T-SQL.

Essayez quelque chose comme ceci:

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

Je veux convertir la colonne de type datetime 'ColumnTime' en colonne de type chaîne 'ColumnTimeForXCategory'. Je pense que vous avez mal compris. – Ray

0

Comme mentionné ci-dessus, vous pouvez LINQ veut traduire ce que vous faites pour sql. Ce n'est pas possible dans ce cas. Mais vous pouvez le transformer en une chaîne avant votre requête et ensuite passer la chaîne dans l'expression linq.

0

Ne pas configurer la base de données pour la mise en forme des chaînes pour l'interface utilisateur. Parse-le du côté client.

1

Je suis tombé sur ce post pourquoi je cherchais la même réponse. Voici ce que j'ai finalement découvert en examinant les propriétés de l'objet date.

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

Vous pouvez utiliser string.Format que ToString() méthode pour résoudre votre problème. Comme

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

Cela a fonctionné pour moi, merci! – gregtheross

Questions connexes