2009-07-31 6 views
1

Ich habe eine Methode, die eine ObjectQuery akzeptiert und Where-Klauseln hinzufügt, abhängig davon, ob sie Werte für verschiedene Filterparameter empfängt. Die Methode muss eine ObjectQuery zurückgeben. Wie kann ich einen grundlegenden Datumsvergleich durchführen, z. wo dateX < DatumY.Vergleichen von Date/DateTime in Entity SQL Where-Klausel

Das ist mein aktueller Code ist:

if (myDateFilter != null) 
{ 
    query = query.Where(
     string.Format(
      "it.ExpireDate < cast('{0}' as System.DateTime)", 
      myDateFilter)); 
} 

Mit myDateFilter einen Wert von DateTime.Now hat, dieser Code sagt: System.Data.SqlClient.SqlException: Die Umwandlung eines varchar Datentypen Datumsdaten Typ ergab einen Wert außerhalb des Bereichs.

Alle anderen Parameter sind String- oder Integer-Filter, also war es kein Problem zu implementieren. Irgendwelche Ideen??

+0

OK, es sieht aus wie ich versuche, ein Datum zu übergeben, das die Zeichenfolge Form von '31/7/2009 'nimmt, die bricht, aber wenn ich "1/1/2009" passiere, funktioniert es, also denke ich, dass es a Unterschied in den Kulturen von whats in der db und was geht in der Anwendung. Wie kann ich sie im selben Format vergleichen? Oder in irgendeiner kulturinvarianten Weise ... – andrej351

Antwort

0

Sie müssen das Format kennen, in dem der Benutzer die Daten eingegeben hat. Sehen Sie sich die Funktionen DateTime.Parse und ParseExact an.

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

Sie können sie jede Eingabe-String in einen gültigen Datetime zu analysieren, wenn Sie das Format kennen. Es gibt auch einige Kulturinvarianten.

Ein guter Schutz dagegen ist, das Datum immer von einem DateTimePicker usw. zu formatieren, um das lange Format zu verwenden (JJJJMMTT HH: MM: SS). Es gibt eine Formatzeichenkette, um .Net das zu sagen, aber ich kann mich momentan nicht daran erinnern.

Wenn Sie die Strings von Benutzereingaben akzeptieren, müssen Sie die CurrentCulture berücksichtigen (der gleiche Link oben hilft).