Gibt es eine Möglichkeit, zwei DateTime
Variablen in zu vergleichen , Linq2Sql
aber den Zeitteil zu ignorieren?
Die App speichert Elemente in der Datenbank und fügt ein Veröffentlichungsdatum hinzu. Ich möchte die genaue Uhrzeit behalten, kann aber trotzdem das Datum selbst ermitteln.
Ich möchte die tatsächliche Tageszeit vergleichen 12/3/89 12:43:34
und 12/3/89 11:22:12
ignorieren, damit beide als gleich angesehen werden.
Ich denke, ich kann alle Tageszeiten einstellen, 00:00:00
bevor ich vergleiche, aber ich möchte eigentlich die Tageszeit wissen, die ich nur auch nach Datum vergleichen möchte.
Ich habe einen Code gefunden, der das gleiche Problem aufweist, und sie vergleichen Jahr, Monat und Tag getrennt. Gibt es einen besseren Weg, dies zu tun?
quelle
Für einen echten Vergleich können Sie Folgendes verwenden:
quelle
-1
,0
und1
, wirklich? Sie sind nur magische Zahlen, die "weniger", "gleich" und "größer" darstellen. Und Sie müssen die resultierende Ganzzahl anschließend mit etwas "vergleichen", da es drei mögliche Werte gibt. Ich muß mit @ David einig , dass es viel natürlicher zu bedienen istdateTime1.Date < dateTime1.Date
, und in ähnlicher Weise mit<=
,>
und>=
in den meisten Anwendungen.So mache ich das, um mit LINQ zu arbeiten.
Wenn Sie es nur verwenden
dtOne.Date == dtTwo.Date
, funktioniert es nicht mit LINQ (Fehler: Das angegebene Typmitglied 'Date' wird in LINQ to Entities nicht unterstützt.)quelle
EntityFunctions
wurde in .NET 4.5.2 veraltet. Verwenden Sie stattdessen :DbFunctions.TruncateTime
. Es scheint die identische Methode zu sein, gerade verschoben ..Wenn Sie Entity Framework <v6.0 verwenden, verwenden
EntityFunctions.TruncateTime
Sie Wenn Sie Entity Framework> = v6.0 verwenden, verwenden SieDbFunctions.TruncateTime
Verwenden Sie entweder (basierend auf Ihrer EF-Version) eine beliebige
DateTime
Klasseneigenschaft, die Sie in Ihrer Linq-Abfrage verwenden möchtenBeispiel
quelle
quelle
Sie können dies verwenden, wenn Sie nullfähige DateFields verwenden.
quelle
quelle
Der Diff-Wert gibt die Anzahl der Tage für das Alter an. Wenn der Wert negativ ist, fällt das Startdatum nach dem Enddatum. Dies ist eine gute Prüfung.
quelle
Sie können Equals oder CompareTo verwenden .
Gleich : Gibt einen Wert zurück, der angibt, ob zwei DateTime- Instanzen denselben Datums- und Zeitwert haben.
CompareTo Rückgabewert :
DateTime ist nullbar:
oder
DateTime ist nicht nullbar:
oder
quelle
Verwenden Sie in Ihrer Join- oder Where-Klausel die
Date
Eigenschaft der Spalte. Hinter den Kulissen wird eineCONVERT(DATE, <expression>)
Operation ausgeführt. Auf diese Weise können Sie Daten ohne Zeitangabe vergleichen.quelle
Du kannst es versuchen
quelle
quelle