Elegante Kombination von zwei LINQ-Abfragen

8

Wie kann ich diese beiden LINQ-Abfragen in einem kombinieren?

%Vor%     
user424134 26.08.2011, 17:54
quelle

6 Antworten

8

MaxBy ist das, wonach Sie suchen: Ссылка benutze es so:

%Vor%

BEARBEITEN 1: Da Jason darauf hingewiesen hat, dass diese Methode nur verwendet werden soll, wenn Sie mit LINQ zu Objekten arbeiten. Wenn Sie eine Abfrage für eine Datenbank durchführen (und daher LINQ to SQL oder Ähnliches verwenden), sollten Sie einen anderen Ansatz verwenden.

Ihr scheint recht lesbar, aber wenn es Sie nicht zufriedenstellt, können Sie immer AsEnumerable für das Objekt IQueryable aufrufen und dann MaxBy method verwenden.

%Vor%

BEARBEITEN 2: Eine Sache, die Sie in Ihrer Abfrage ändern könnten, ist die zweite Anweisung. Versuchen Sie, es wie folgt zu verkürzen (um Where zu vermeiden):

%Vor%     
as-cii 26.08.2011 17:59
quelle
2
%Vor%     
Kevin Kalitowski 26.08.2011 17:58
quelle
1

Beachten Sie, dass das am besten ohne LINQ ist. Durchlaufen Sie einfach die Liste, verfolgen Sie das maximale Datum und den Punkt, an dem das erste Datum gefunden wurde:

%Vor%

Jetzt iterieren Sie nur einmal und müssen nicht den Sortiervorgang durchführen.

Dies setzt voraus, dass Sie LINQ-to-Objects verwenden. Wenn dies nicht der Fall ist, wird die gesamte Sammlung aus der Datenbank (oder wo auch immer) abgerufen, was unerwünscht ist. In diesem Fall würde ich einfach die Methode verwenden, die Sie bereits haben.

    
dlev 26.08.2011 17:57
quelle
1
%Vor%     
doowb 26.08.2011 18:11
quelle
1

Für Link-to-Objects (Aggregat wird in Linq-zu-Sql nicht unterstützt). Führt in N (n) aus (ok, eigentlich O (n + 1))

%Vor%

Für diejenigen, die Probleme beim Lesen haben, ist der erste Parameter der Anfangswert für den Akkumulator, der normale Werte in der Liste zusammenfassen würde, aber hier wird nur der aktuell höchste Datensatz gehalten. Dann wird für jeden Datensatz in der Liste die Lambda-Funktion aufgerufen, wobei der höchste Wert und der nächste Wert angegeben wird. Es gibt die neue aktuelle höchste zurück.

    
James Curran 26.08.2011 18:31
quelle
-1
%Vor%     
Matt McHugh 26.08.2011 17:58
quelle

Tags und Links