Erstens, ich bin ein Anfänger in LINQ! Dann ist die Sache, dass ich eine Sammlung habe, die:
Ich wollte Where verwenden, aber ich mag die if
Instruktionen nicht, die ich tun muss ... also hier ist mein Code:
Das funktioniert, aber ich habe das Gefühl, dass das nicht so ist, wie ich es mit LINQ machen sollte ... Irgendwelche Vorschläge?
Antwort einer nicht eindeutigen Entität (mit der Ausnahme, dass mehrere Instanzen verworfen werden)
Verwenden Sie SingleOrDefault . Dies wird das eindeutige Element zurückgeben, wenn es existiert, null, wenn es nicht existiert, oder es wird ausgelöst und die Ausnahme, wenn es mehr als eins gibt.
%Vor%Eindeutige Eigenschaft Antwort (es wird niemals mehrere Instanzen geben)
Wenn Ihr System so eingerichtet ist, dass BaseName
eine eindeutige Entität ist, Benutzer FirstOrDefault
, wird keine Ausnahme ausgelöst, wenn es mehrere gibt, da es bei der ersten Instanz stoppt, aber das System wird entworfen es wird also nie dieselbe Instanz geben, also wäre es akzeptabel (und zeitaufwendig).
Wie ThePower sagt, sollten Sie SingleOrDefault
oder vielleicht %Co_de% . Wenn es wirklich nur einen solchen Eintrag gibt, werden sie das gleiche tun, aber FirstOrDefault
ist möglicherweise schneller, wenn Sie LINQ to Objects verwenden - FirstOrDefault
müsste die komplette Sequenz durchsehen, um zu prüfen, ob es einen gibt. t irgendwelche anderen Übereinstimmungen.
Wenn mehrere Übereinstimmungen vorhanden sind, löst SingleOrDefault
eine Ausnahme aus; SingleOrDefault
gibt nur die erste Übereinstimmung zurück.
So könnten Sie verwenden:
%Vor%Beachten Sie, dass dies umständlich sein kann, wenn Ihr Sequenzelementtyp ein Werttyp ist, da Sie möglicherweise nicht zwischen dem Standardwert für den Elementtyp aufgrund fehlender Übereinstimmungen und einem "echten" Wert unterscheiden können. Es sieht so aus, als wäre das in diesem Fall kein Problem, aber es lohnt sich, daran zu denken.
Hier ist tmp Null, wenn Sie keinen solchen Datensatz haben.
Any
gibt bool
zurück, um anzugeben, ob solche Elemente vorhanden sind. First
gibt den Datensatz aus Ihrer Sammlung zurück. In jedem Fall haben Sie ein Objekt aus der Sammlung und Ihr Zustand resultiert. Sie können FirstOrDefault
verwenden und dann auf null
den zurückgegebenen Wert prüfen.