Verwendung nur des Jahrteils eines Datums für eine WHERE-Bedingung

8

In der unten stehenden LINQ-Anweisung möchte ich Personen mit einem Prüfungsdatum im Jahr 2010 auswählen. Das Prüfungsdatum wird als Datum / Uhrzeit gespeichert, da das tatsächliche Datum und die Uhrzeit in anderen Anwendungen verwendet werden. Was ist der eleganteste, einfachste und beste Weg, das exzam-Datum mit "2010" zu vergleichen? Oder, sollte ich nur das Testdatum mit 1/1/2010 vergleichen?

%Vor%

EDIT # 1

Ich dachte, ich sollte ein Jahr später am Prüfungstermin sehen, aber ich habe es nicht getan. Nachdem ich ein paar Posts gesehen hatte, ging ich zurück und fand das funktioniert ...

%Vor%

Warum ist .Value für den Zugriff erforderlich? Die Prüfung ist eine nullbare Datetime.

    
DenaliHardtail 14.01.2011, 18:06
quelle

2 Antworten

18

Sie können einfach die Eigenschaft Year für DateTime :

verwenden %Vor%
  

Warum ist .Value erforderlich, um auf .Year zuzugreifen? Die Prüfung ist eine nullbare Datetime.

Genau weil Exam ein Nullable<DateTime> ist. Wenn Sie eine Instanz von Nullable<DateTime> like

deklarieren %Vor%

Beachten Sie, dass exam kein DateTime ist und Sie daher nicht direkt auf die Eigenschaften von DateTime zugreifen können. Um eine konkrete Instanz von DateTime zu erhalten, verwenden Sie die Eigenschaft Value für Nullable<DateTime> (alle Nullable<T> s haben diese Eigenschaft), so dass

%Vor%

ist ein DateTime unter der Annahme, dass exam nicht null ist. Sie können also sagen

%Vor%

und natürlich aus Gründen der Kürze

%Vor%

Beachten Sie, dass dies ausgelöst wird, wenn exam.HasValue falsch ist.

    
jason 14.01.2011, 18:14
quelle
0

Ich kenne den elegantesten Weg nicht, aber das ist der einfachste Weg, den du machen kannst, wenn du testest, dass der Datetime-Col, in dem du dein Date speicherst, auf I want to select people with an exam date in 2010 -

basiert %Vor%     
Vishal 14.01.2011 18:13
quelle