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.


  • Administrator

    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 kein Where() 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 eine foreach -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 zu FirstOrDefault() etwas schlechter, da mir First() 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 auf FirstOrDefault() portierbar sein, stimmts?



  • Firefighter schrieb:

    [...] sollte ja genauso auf FirstOrDefault() protierbar sein, stimmts?

    Ja, ist es. 🙂



  • Sauber, ich danke euch ma wa 🙂


Log in to reply