C # DateTime bis auf die Minute von linq

8

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

zu greifen %Vor%

Und da ist mein Linq-Ausdruck.

%Vor%

Irgendwelche Ratschläge?

    
SernOne 26.01.2016, 23:53
quelle

4 Antworten

6

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:

%Vor%

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 .

    
Alexander Derck 27.01.2016, 00:08
quelle
4

Sie machen mehrere Referenzen auf DateTime.Now , die möglicherweise jedes Mal einen anderen Wert hat. Folgendes sollte besser funktionieren:

%Vor%

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>     

Eren Ersönmez 27.01.2016 00:06
quelle
1

Ä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

verwenden     
Shaun Sharples 27.01.2016 00:05
quelle
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:

%Vor%     
Ian 27.01.2016 00:06
quelle

Tags und Links