Mit .HasValue() in LinQ-beim Umgang mit einem Nullable-Typ, ist es ein Weg, um loszuwerden, die "Möglich SystemInvalidException"?

Habe ich eine Liste von Foo's.

Foo hat eine CreateDate Typ DateTime?

Möchte ich, um die älteste Foo. Ich habe versucht mit dem intuitiven Weg, aber ich bekomme einen möglichen System.InvalidOperationException.

DateTime oldestFoo = 
(from f in allFoos where f.CreateDate.HasValue select f.CreateDate.Value).Min(); 

Gibt es etwas, was ich verpasst habe oder ist es einfach nicht möglich, auf diese Weise?

Kann ich es auch ohne LinQ auf diese Weise, aber ich will lernen, den anderen Ansatz zu.

DateTime oldestFoo = DateTime.MaxValue;
foreach (var foo in allFoos)
{
    if (foo.CreateDate.HasValue && oldestFoo > foo.CreateDate)
    {
        oldestFoo = (DateTime)foo.CreateDate;
    }
}
  • Was wollen Sie, das Ergebnis zu werden, wenn es nicht alle Ergebnisse mit den Werten? (Eine kurze, aber komplette Programm würde hier helfen...)
  • Falls nicht vorhanden, oldestFoo werden können DateTime.MaxValue.
  • Mein Punkt ist: wie würden Sie erwarten, dass Min() wissen?
  • Zuerst schrieb ich die foreach-Beispiel, das perfekt funktioniert, aber ich wollte eine LinQ-version, und ich weiß einfach nicht, warum kann ich nicht verwenden HasValue()und .Value wie. Hmm. So das eigentliche problem ist, dass ich nicht die DateTime.MaxValuein meiner LinQ-code.
  • Ja ich bekomme es jetzt, denke ich. Alle mein Fokus lag auf HasValue() und Value🙂
  • Vielen Dank für das entfernen meines tunnel-vision und mich immer wieder auf den richtigen Weg.

InformationsquelleAutor radbyx | 2012-03-19
Schreibe einen Kommentar