Wie bekomme ich Max () von Count () mit LINQ?

8

Ich bin neu bei LINQ und ich habe diese Situation. Ich habe diese Tabelle:

%Vor%

Ich möchte nur die Maximierung von Zeilen pro Datum nach Bereich auflisten, wie folgt:

%Vor%

Ich möchte dies mithilfe von LINQ tun, haben Sie irgendwelche Ideen, wie Sie das tun?

    
cvsr1980 16.11.2010, 23:32
quelle

4 Antworten

6

Ich denke, etwas in dieser Richtung sollte funktionieren:

%Vor%     
StriplingWarrior 16.11.2010 23:57
quelle
4

Verwenden von Erweiterungsmethoden:

%Vor%     
Jla 17.11.2010 14:40
quelle
1

Leider kann ich das im Moment nicht testen, aber versuche es:

%Vor%     
Abe Miessler 16.11.2010 23:40
quelle
0

Dieser Ansatz:
1) Gruppen nach Datum
2) Für jedes Datum wird nach Bereich gruppiert und der Gesamtwert berechnet 3) wählt für jedes Datum den Artikel mit dem größten Gesamtwert aus 4) Sie enden mit Ihrem Ergebnis

%Vor%

Laut LINQ in Action (Kapitel 5.3.3 - Beeinträchtigt LINQ to Objects die Leistung meines Codes?) ist die Verwendung der MaxElement-Erweiterungsmethode einer der effektivsten Ansätze. Ich denke, die Aufführung wäre O (4n); eine für die erste GroupBy, zwei für die zweite GroupBy, drei für die Count () und vier für die Schleife innerhalb von MaxElement.

DrDros Ansatz wird mehr wie O (n ^ 2) sein, da es die gesamte Liste für jedes Element in der Liste durchläuft.

Der Ansatz von StriplingWarrior wird näher an O (n log n) liegen, da er die Elemente sortiert. Obwohl ich zugeben werde, mag da eine verrückte Magie drin sein, die ich nicht verstehe.

    
Ecyrb 17.11.2010 15:57
quelle

Tags und Links