2017-02-24 3 views
0

Ich habe die Daten folgende Tabelle:Linq-Gruppe durch und nehmen Sie die Zählung

table data

Die obige Tabelle Einfügen von Daten funktioniert wie folgt: - Wir haben zwei Status jetzt (1, 2). Wenn ein Eintrag erstellt wird, hat er den Status 1 und wird dem Benutzer mit der ID 1 zugewiesen. Wenn die Daten aktualisiert werden, hat sie den Status 2 und kann mehreren Benutzern zugewiesen werden, hier also zugeordnet ist Benutzer 2 und 3

ich mag die Daten von dem Status, in der folgenden Art und Weise gruppiert werden: -

Result

sollte jede ID nur nur unter einem einzigen Zustand enthalten sein, und das sollte basierend auf dem letzten Datum für jede Statusaktualisierung erfolgen. Wie ist das in linq C# möglich?

Bearbeiten Das Folgende ist, was ich erreichen konnte.

+0

Also Sie wollen grundsätzlich alle letzten Eintrag für jeden Benutzer nehmen, gruppieren sie nach Status und zählen Benutzer in jedem Status. Recht? – Tatranskymedved

+2

definitiv ** möglich **, und Sie sollten sich zuerst versuchen –

+0

können Sie uns bitte wenig Code zeigen? –

Antwort

1

Entsprechend Ihrer Anforderung

Jede id sollte nur unter einem einzigen Zustand enthalten sein, und das genommen sollte für jeden Status-Update auf dem neuesten Datum basieren

müssen Sie zuerst von Id Gruppe, nehmen Sie das Element mit spätestes Datum aus jeder Gruppe und die Gruppe dann das Ergebnis durch Status:

var query = 
    from e in (from e in this.logRepository.GetQuery(null) 
       group e by e.Id into g 
       select g.OrderByDescending(e => e.Date).FirstOrDefault()) 
    group e by e.Status into g 
    select new { Status = g.Key, Count = g.Count() }; 

oder alternativ

var query = 
    from e in this.logRepository.GetQuery(null) 
    group e by e.Id into g 
    from e in g.OrderByDescending(e => e.Date).Take(1) 
    group e by e.Status into g 
    select new { Status = g.Key, Count = g.Count() }; 
0

Sie können die GroupBy Methode verwenden, um die gewünschte Funktionalität zu erhalten.

GroupBy(foo => foo.Bar) ergibt ein Dictionary, in dem der Schlüssel der Wert foo.Bar ist und der Wert für jeden Eintrag im Dictionary eine Auflistung dessen ist, was auf dem foo.Bar-Wert übereinstimmt.

Verwandte Themen