2010-06-16 16 views
5

Korzystam z linqtosql i wewnątrz kwerendy linq, próbowałem przekonwertować kolumnę typu daty i godziny na ciąg taki jak "dd-MM-yy". Jednak mam błąd w następujący sposób:Jak przekonwertować datetime na ciąg w linqtosql?

NotSupportedException: Metoda 'system.string toString (System.String)' ma obsługiwany tłumaczenia do SQL.

Oto mój kwerendy 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

Dlaczego potrzebujesz ToString? –

+0

Właściwość ColumnTimeForXCategory jest typem ciągu, aby wyrazić datetime w bardziej czytelny sposób. Chcę wyrazić kolumnę ColumnTime w stylu "13 -06-2010". dlatego użyłem właściwości ColumnTimeForXCategory. – Ray

Odpowiedz

0

Jesteś analizowania DateTime sznurki w samej i LINQ to SQL wypowiedzi nie może tłumaczyć ten kod C# na ekwiwalent kodu T-SQL.

Spróbuj coś takiego zamiast:

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

Chcę konwersji typu datetime kolumna "ColumnTime" kolumna typu ciąg "ColumnTimeForXCategory". Myślę, że źle zrozumiałeś. – Ray

0

Jak wspomniano powyżej, można LINQ chce tłumaczyć, co robisz do sql. To nie jest możliwe w tym przypadku. Ale możesz przekształcić go na ciąg przed zapytaniem, a następnie przekazać ciąg do wyrażenia linq.

0

Nie należy wykonywać w bazie danych formatowania ciągów znaków dla interfejsu użytkownika. Przetwórz go po stronie klienta.

1

Natknąłem się na ten post, dlaczego szukałem tej samej odpowiedzi. Oto, co ostatecznie odkryłem, że mogę zrobić, patrząc na właściwości obiektu obiektu daty.

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

Można użyć string.Format niż ToString() metody rozwiązać twój problem. Takich, jak

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

To zadziałało dla mnie, dzięki! – gregtheross

Powiązane problemy