2010-12-10 16 views
0

Ich habe eine Datenbanktabelle (Info genannt), die [Daten], [fkID], [UserID], [Timestamp] speichert. [Daten] sind eigentlich mehrere Spalten, aber das spielt keine Rolle.C# Groupby Distinct

Im Wesentlichen kann ein Benutzer gehen und Daten in ein Formular eingeben, und das Formular fügt eine neue Zeile in Info.

Ich möchte in der Lage sein, das letzte Element [Data] aus jeder [UserID] für eine bestimmte [fkID] auszuwählen. Dies kann in LINQ gemacht werden, ich habe es einfach nicht herausgefunden. Hier ist, was ich bis jetzt habe:

var q = (from i in db.Info 
     where i.fkID == @paramID 
     orderby Timestamp descending 
     groupby new {i.UserID}) 
     .Distinct() 

Dies funktioniert offensichtlich nicht. Es gibt die korrekte Benutzer-ID zurück, aber nicht den [Daten] -Teil, den ich tatsächlich möchte.

In Worten, hier ist das, was ich tun mag:

Für jeden Eintrag in Info mit einem gewissen FKID, mag ich die letzte Zeile von jedem Benutzer wählen.

Ich würde gerne wissen, wie dies in LINQ zu tun.

Antwort

3

Sie müssen die erste Zeile in jeder Gruppe wählen, wie folgt aus:

var q = from i in db.Info 
     where i.fkID == @paramID 
     group i by i.UserID into g 
     select new { 
      UserID = g.Key, 
      Recent = g.OrderByDescending(i => i.Timestamp).First() 
     }; 
+0

Dieses Recht sieht. Ich habe es noch nicht getestet, aber ich gehe davon aus, dass es funktioniert. Wenn ich es teste, markiere ich dein richtig. Vielen Dank. – Shawn

0

sollten Sie .First() anstelle von .Distinct()