2017-05-23 4 views
0

Ich versuche, dies zu tun, aber es funktioniert nicht, es leer Ergebnisse zurückgibt:Vergleichen Datetime in Entity Framework

if (inputDate != null) 
{ 
    dataContext.myTable 
       .Where(r => r.myDate.HasValue && 
          r.myDate.Value.Day == inputDate.Value.Day) 
} 

ich zwei Nullable-DateTime Werte vergleichen wollen, möchte ich nur DateTime Werte aus Datenbank abgerufen werden das gehört zu einer bestimmten Date. Und um dieses Problem zu vereinfachen, versuche ich zuerst nur ihren Wert zu vergleichen.

Bitte nicht als doppelt markieren, ich arbeite mit EF5, so habe ich keine DbFunctions.TruncateTime() Funktion.

+0

Sie könnten einfach 'r.myDate.Date == inputValue.Date' verwenden. Die Verwendung von "Day" bedeutet, dass Sie Spiele unabhängig vom Monat erhalten. –

+0

Nicht funktioniert es gibt eine Ausnahme: * Die angegebene Member 'Date' wird in LINQ to Entities * nicht unterstützt. Tatsächlich überprüft EntityFramework nicht, wie dieser Code in sql übersetzt wird. –

+0

Versuchen Sie, 'r.myDate.HasValue' zu ​​entfernen und dann' r.myDate.Date == inputValue.Date' –

Antwort

1

Wie Sie bereits gesagt haben, wird Entity Framework einen Fehler ausgeben. Die beste Option, die Sie haben, besteht darin, eine Abfrage mit einer Bedingung zwischen der ersten Sekunde des Tages und der letzten Sekunde des Tages zu verwenden.

if(inputDate != null) 
{ 
    /* Assuming inputDate.Value only contains the Date part. 
     i.e. : 2017-05-23 instead of 2017-05-23 10:00:32 */ 
    DateTime inputDateFirstSecond = inputDate.Value; 
    DateTime inputDateLastSecond = inputDateFirstSecond 
     .AddHours(23) 
     .AddMinutes(59) 
     .AddSeconds(59); 

    dataContext.myTable.Where(r => r.myDate.HasValue && 
     (r.myDate.Value >= inputDateFirstSecond && r.myDate.Value <= inputDateLastSecond) 
    ) 
}  

Es gibt einige Entity Framework-Erweiterungen für SQL Server, die Sie mit den Datetime-Teilen arbeiten lassen, aber sie würden nicht funktionieren, wenn Sie Ihren Datenbank-Engine in der Zukunft ändern.

+0

Danke, du hast mich oft gerettet –

Verwandte Themen