Czy istnieje sposób na porównanie dwóch DateTime
zmiennych, Linq2Sql
ale z pominięciem części Czas.
Aplikacja przechowuje elementy w bazie danych i dodaje opublikowaną datę. Chcę zachować dokładny czas, ale nadal będę w stanie przyciągnąć samą datę.
Chcę porównać 12/3/89 12:43:34
i 12/3/89 11:22:12
nie brać pod uwagę faktycznej pory dnia, więc oba są uważane za takie same.
Wydaje mi się, że mogę ustawić wszystkie pory dnia, 00:00:00
zanim zacznę porównywać, ale tak naprawdę chcę znać porę dnia, chcę tylko móc porównywać tylko według daty.
Znalazłem kod, który ma ten sam problem i osobno porównują rok, miesiąc i dzień. Czy jest na to lepszy sposób?
Aby uzyskać prawdziwe porównanie, możesz użyć:
źródło
-1
,0
i1
, naprawdę? Są to po prostu magiczne liczby reprezentujące „mniej”, „równe” i „większe”. I będziesz musiał później „porównać” wynikową liczbę całkowitą z czymś, ponieważ istnieją trzy możliwe wartości. Muszę zgodzić się z @David że jest o wiele bardziej naturalny w użyciudateTime1.Date < dateTime1.Date
, i podobnie z<=
,>
i>=
, w większości zastosowań.Tak to robię, aby pracować z LINQ.
Jeśli
dtOne.Date == dtTwo.Date
go użyjesz, nie będzie działać z LINQ (Błąd: element członkowski określonego typu „Data” nie jest obsługiwany w LINQ do encji)źródło
EntityFunctions
został wycofany w .NET 4.5.2. Użyj tego zamiast:DbFunctions.TruncateTime
. Wygląda na to, że jest to identyczna metoda, właśnie się poruszyłem.Jeśli używasz Entity Framework <v6.0, użyj
EntityFunctions.TruncateTime
Jeśli używasz Entity Framework> = v6.0, użyjDbFunctions.TruncateTime
Użyj albo (w zależności od wersji EF) wokół dowolnej
DateTime
właściwości klasy, której chcesz użyć w zapytaniu LinqPrzykład
źródło
źródło
Możesz użyć tego, jeśli używasz zerowych pól DateField.
źródło
źródło
Wartość różnicy reprezentuje liczbę dni dla wieku. Jeśli wartość jest ujemna, data rozpoczęcia wypada po dacie zakończenia. To dobry czek.
źródło
Możesz użyć Equals lub CompareTo .
Równa się : zwraca wartość wskazującą, czy dwa wystąpienia DateTime mają tę samą wartość daty i godziny.
Porównaj, aby zwrócić wartość :
DateTime ma wartość null:
lub
DateTime nie ma wartości null:
lub
źródło
W klauzuli join lub where użyj
Date
właściwości kolumny. Za kulisami wykonuje toCONVERT(DATE, <expression>)
operację. Powinno to umożliwić porównanie dat bez czasu.źródło
Możesz spróbować
źródło
źródło