Ich versuche zwei DateTimes
in der Minute von einem DateTime.Now
und einem SQL-Eintrag zu vergleichen. Ich sehe das Problem darin, dass die Ticks aufgrund der Art, die aus der DB zurückgegeben wird, leicht ausfällt. Allerdings kann ich keine Arbeit herausfinden.
Das ist mein DateTime
, um
Und da ist mein Linq-Ausdruck.
%Vor%Irgendwelche Ratschläge?
Ich gehe davon aus, dass Sie Entity Framework
dafür verwenden.
Wenn Sie nur die Datetime bis zu Minuten vergleichen möchten, können Sie System.Data.Entity.DbFunctions
verwenden, um auf kanonische Funktionen in linq-to-entities zuzugreifen.
Sie können dies zum Beispiel verwenden:
Auf diese Weise haben Sie Zugriff auf den erweiterten Sql-Datetime-Vergleich und Sie müssen keine Tricks machen, um Ihrer DateTime.Now
Sekunden / Millisekunden hinzuzufügen. Diese Funktion wird alles ignorieren, das kleiner als Minuten ist .
Sie machen mehrere Referenzen auf DateTime.Now
, die möglicherweise jedes Mal einen anderen Wert hat. Folgendes sollte besser funktionieren:
Beachten Sie, dass das Hinzufügen von Stunden und Minuten zu einem Datum besser funktioniert, als wenn Sie versuchen, die Sekunden und Millisekunden zu entfernen, da mehr Details in DateTime
als Millisekunden vorhanden sind / p>
Ändern
%Vor%An
%Vor%Gibt es einen anderen Grund, warum Sie einen Termin auf die exakte Millisekunde setzen müssen? Es scheint sehr anfällig für fehlende Datensätze zu sein?
Bearbeiten
Auch in Ihrer Datenbank ist der Wert 2015-12-10 10:33:48.373
von 2015-12-10 10:33:48.374
verschieden, obwohl sie 1 Millisekunde auseinander liegen. Wenn Sie einen größeren Bereich erhalten möchten, können Sie c.StartDate >= startDate && c.StartDate <= endDate && c.Approved == 1
Sie können Vergleiche auf TimeSpan Objekten durchführen, was bedeutet, dass Sie es so machen können:
%Vor% Natürlich, wenn c.StartDate
weniger als 9 Minuten in der Zukunft ist, wird die Subtraktion ein Ergebnis von & lt; -1 Minuten haben. Ich bin mir nicht sicher, ob dein Ziel innerhalb von 1 Minute ist. Wenn das der Fall ist, können Sie .Duration()
zu deiner Gleichung, die den absoluten Wert von TimeSpan zurückgibt: