LINQ Einzel-Abfrage Problem[gelöst]
-
Moin Leutz,
folgendes Problem. Ich habe eine Liste von speziellen objekten, nennen wir sie mal SP(
spezielle Objekte
). Dann besitze ich eine Combobox wo ein paar strings drinne stehen, nenne wir diese einfach mal"namen"
. So das spezielle objekt hat auch ein attribut"name"
. Pseudocode:class Form1 { private List<spezielleObjekt> _objekte; //ctor usw.... //eine Methode private void TuMalWas() { } }
So nun würde ich gerne eine LINQ-Abfrage machen können, die mir nur ein Objekt zurückliefert, ungefähr so
spezielleObjekte objekt = (from ob in this._objekte where ob.name == combobox.SelectedItem.Text select ob).; //was kommt nun als funktion ???
LINQ liefert ja normaler weiße immer eine IEnumerable<T> zurück. Ich weiß aber das man bei LINQ auch die "Ausführung" der zurückgegeben Enumeration vorzeitig herbeiführen kann, indem man z.B. eine Aggregatfunktion auf das ergebnis anwendet. Doch ich weiß grad einfach nicht, wie ich es hinbekommen das mir ein objekt zurpckgegeben werden kann, hat da jemand einen Tip? Oder soll ich es doch über die konventionelle
foreach
Variante machen?
-
Problem gelöst.
FirstOrDefault()
ist des Rätsels Lösung.
-
Firefighter schrieb:
Problem gelöst.
FirstOrDefault()
ist des Rätsels Lösung.Noch besser wäre eigentlich
First()
. Du kannst sogar ein Prädikat angeben, brauchst also auch keinWhere()
mehr.this._objekte.First(o => String.Equals(o.name, combobox.SelectedItem.Text));
Bin zwar auch noch neu bei C#, aber würde ich irgendwie als sinnvoller sehen
Grüssli
-
Willst du jetzt für jedes Objekt im Ergebnis eine Methode ausführen? Dann nimm
IEnumerable<T>.ForEach()
oder eineforeach
-Schleife.Oder willst du nur ein einzelnes Objekt aus dem Eregbnis? Dann gibt es
Single()
,First()
,Last()
.Oder habe ich deine Frage ganz falsch verstanden?
-
Der Beitrag kam jetzt wohl etwas spät, hab vergessen auf "Absenden" zu klicken.
Aber du hast es ja schon selbst herausgefunden.
-
@Dravere
First()
ist im Gegensatz zuFirstOrDefault()
etwas schlechter, da mirFirst()
eine Exception schmeißt wenn er kein Element in der Sequenz findet,FirstOrDefault()
hingegen gibt mir null zurück wenn nichts da ist und auf Null prüfen ist irgendwie einfacher als jedesmal ne Exception zu catchen. Aber deine Lösung ohne der Where Bedingung schaue ich mir mal an, sollte ja genauso aufFirstOrDefault()
portierbar sein, stimmts?
-
Firefighter schrieb:
[...] sollte ja genauso auf
FirstOrDefault()
protierbar sein, stimmts?Ja, ist es.
-
Sauber, ich danke euch ma wa