LINQ Max Abfrage

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    LINQ Max Abfrage

    Hallo,

    ich möchte in einem Directory immer die größte datei ermitteln ... ich habe es mit LINQ auch geschafft, aber es sieht nicht sehr elegant aus ...

    hat von euch jemand eine idee wie ich das vereinfache ?

    VB.NET-Quellcode

    1. For Each Str As String In query
    2. Dim temp As String = Str
    3. Dim File = (From p As FileInfo In Files Where p.DirectoryName = temp Select p)
    4. Dim len = (From p As FileInfo In Files Select p.Length).Max
    5. Dim result = From p As FileInfo In Files Where p.Length = len Select p
    6. Next


    Gruß
    Pascal
    from f as fileinfo in files order by f.length descending select f take 1

    (oder so ähnlich, aber der Sinn dürfte klar sein)

    Sortiere die Liste der Dateien nach Länge (absteigend) und nehme dann das erste Element

    sieht nicht sehr elegant aus ...

    Dauert etwas, bis man den "Rythmus" findet, aber irgendwann macht's süchtig ;)

    hmmm...
    Vermutlich könnte man die äußere Schleife auch gleich mit reinnehmen:
    from f as fileinfo in files where query.contains(f.DirectoryName) order by f.length descending select f take 1

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    Joho funktioniert ;) danke ...

    ich musste aber statt "Take 1"

    VB.NET-Quellcode

    1. Dim result = (From p As FileInfo In Files Where p.DirectoryName = temp Order By p.Length Select p).First


    verwenden, da sonst der nachfolgende Code gemeckert hat weil eine list(of ...) kommen könnte

    ErfinderDesRades schrieb:

    Auch bei First wird nach dem ersten Element abgebrochen.

    Nein.
    Es wird eine Liste mit X Elementen erstellt und daraus das erste genommen

    Mit Take UND First wird eine Liste mit EINEM Element erstellt und daraus das erste genommen. Das "First" gezieht sich ja immer auf eine Liste, während Take Teil der Query ist, so dass beim evaluieren schneller ein Ergebnis erzielt wird bzw KANN (das hängt von den vorgenommenen Optimierungen ab)
    nein, First bricht nach dem ersten Element ab. First erstellt keine Liste.

    Ist hier schlecht zu überprüfen, denn hier erstellt das Order By eine Liste - die von Take 1 oder First auf gleiche Weise genutzt wird.

    Du müsstest ein eigenes Ienumrable proggen, und darin einen Haltepunkt setzen, um das zu checken.