[c#] LINQ mit groupby und count



Answers

Angenommen, userInfoList ist eine List<UserInfo> :

        var groups = userInfoList
            .GroupBy(n => n.metric)
            .Select(n => new
            {
                MetricName = n.Key,
                MetricCount = n.Count()
            }
            )
            .OrderBy(n => n.MetricName);

Die Lambda-Funktion für GroupBy() , n => n.metric bedeutet, dass UserInfo von jedem UserInfo Objekt UserInfo wird. Der Typ von n hängt vom Kontext ab, im ersten UserInfo vom Typ UserInfo , da die Liste UserInfo Objekte enthält. Im zweiten Vorkommen ist n vom Typ Grouping , weil es sich jetzt um eine Liste von Grouping .

Grouping haben Erweiterungsmethoden wie .Count() , .Key() und so ziemlich alles, was Sie erwarten würden. Genau wie Sie .Lenght an einer string überprüfen .Lenght , können Sie .Count() für eine Gruppe überprüfen.

Question

Das ist ziemlich einfach, aber ich bin ratlos: Angesichts dieser Art von Datensatz:

UserInfo(name, metric, day, other_metric)

und dieser Beispieldatensatz:

joe  1 01/01/2011 5
jane 0 01/02/2011 9
john 2 01/03/2011 0
jim  3 01/04/2011 1
jean 1 01/05/2011 3
jill 2 01/06/2011 5
jeb  0 01/07/2011 3
jenn 0 01/08/2011 7

Ich möchte eine Tabelle abrufen, die Metriken in der Reihenfolge (0,1,2,3 ..) auflistet mit der Gesamtzahl der Male, die die Zählung auftritt. Also von diesem Set würdest du enden mit:

0 3    
1 2    
2 2    
3 1

Ich bin mit der LINQ-Syntax zu kämpfen, aber bin fest, wo man eine groupby setzen und zählen .... irgendeine Hilfe?

POST-Edit: Ich konnte die geposteten Antworten nie zum Laufen bringen, da sie immer einen Datensatz mit der Anzahl der verschiedenen Zählungen zurückgaben. Ich konnte jedoch ein LINQ to SQL-Beispiel erstellen, das funktioniert:

        var pl = from r in info
                 orderby r.metric    
                 group r by r.metric into grp
                 select new { key = grp.Key, cnt = grp.Count()};

Dieses Ergebnis gab mir eine geordnete Menge von Datensätzen mit "Metriken" und der Anzahl der mit diesen verknüpften Benutzer. Ich bin LINQ im Allgemeinen ganz neu und meinem Ansatz scheint dieser Ansatz sehr ähnlich zu sein, hat mir aber eine andere Antwort gegeben.




Related