webentwicklung-frage-antwort-db.com.de

So wählen Sie nur die Datensätze mit dem höchsten Datum in LINQ aus

Ich habe eine Tabelle 'lasttraces' mit den folgenden Feldern.

Id, AccountId, Version, DownloadNo, Date

Die Daten sehen folgendermaßen aus:

28092|15240000|1.0.7.1782|2009040004731|2009-01-20 13:10:22.000
28094|61615000|1.0.7.1782|2009040007696|2009-01-20 13:11:38.000
28095|95317000|1.0.7.1782|2009040007695|2009-01-20 13:10:18.000
28101|15240000|1.0.7.1782|2009040004740|2009-01-20 14:10:22.000
28103|61615000|1.0.7.1782|2009040007690|2009-01-20 14:11:38.000
28104|95317000|1.0.7.1782|2009040007710|2009-01-20 14:10:18.000

Wie kann ich in LINQ to SQL von jeder AccountId (die mit dem höchsten Datum) nur den letzten Lasttrace erhalten?

110
Bas Jansen

Wenn Sie nur das letzte Datum für jedes Konto möchten, verwenden Sie Folgendes:

var q = from n in table
        group n by n.AccountId into g
        select new {AccountId = g.Key, Date = g.Max(t=>t.Date)};

Wenn Sie den gesamten Datensatz möchten:

var q = from n in table
        group n by n.AccountId into g
        select g.OrderByDescending(t=>t.Date).FirstOrDefault();
218
Mehrdad Afshari

Hier ist eine einfache Möglichkeit, dies zu tun

var lastPlayerControlCommand = this.ObjectContext.PlayerControlCommands
                                .Where(c => c.PlayerID == player.ID)
                                .OrderByDescending(t=>t.CreationTime)
                                .FirstOrDefault();

Schauen Sie sich auch diesen tollen LINQ-Ort an - LINQ to SQL Samples

47
Developer

Wenn Sie die ganze Aufzeichnung wollen, ist hier ein Lambda-Weg:

var q = _context
             .lasttraces
             .GroupBy(s => s.AccountId)
             .Select(s => s.OrderByDescending(x => x.Date).FirstOrDefault());
19
Bob Zhang

Es könnte so etwas sein wie:

var qry = from t in db.Lasttraces
          group t by t.AccountId into g
          orderby t.Date
          select new { g.AccountId, Date = g.Max(e => e.Date) };
4
bruno conde

Gehen Sie einen einfachen Weg, um dies zu tun: -

Erstellt eine Klasse für folgende Informationen

  • Level (Anzahl)
  • URL (URL der Website)

Gehen Sie zur Liste der Sites, die in einem ArrayList-Objekt gespeichert sind. Und folgende Abfrage ausgeführt, um es in absteigender Reihenfolge nach Ebene zu sortieren.

var query = from MyClass object in objCollection 
    orderby object.Level descending 
    select object

Nachdem ich die Auflistung in absteigender Reihenfolge sortiert hatte, schrieb ich den folgenden Code, um das Objekt zu erhalten, das in der obersten Zeile enthalten ist

MyClass topObject = query.FirstRow<MyClass>()

Dies wirkte wie ein Zauber.

3