Laden...

Subselect mit Linq

Erstellt von Schaffi vor 11 Jahren Letzter Beitrag vor 11 Jahren 991 Views
S
Schaffi Themenstarter:in
9 Beiträge seit 2008
vor 11 Jahren
Subselect mit Linq

Hallo,

ich komme irgendwie nicht weiter.
Ich möchte ein Subselect mit Linq realisieren aber irgendwie gelingt mir das nicht richtig.

Mein Tabellenschema ist folgendermaßen aufgebaut.


public class Test
{
  public int Id { get; set; }
  public DateTime TimeStamp { get; set; }
  public String Label { get; set; }
}

Daten könnten so aussehen:


1 - 2012-12-31 - Text1
2 - 2013-01-21 - Text2
1 - 2013-01-21 - Text1

Ich benötige immer nur von einer Id, die Zeile mit dem größten Timstamp.
In SQL würde ich folgendes schreiben:

Select a.*
From test a
Where a.TimeStamp = (Select Max(b.TimeStamp) From test b Where b.id = a.id)

Ich benutze das EF.

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Schaffi

Das könnte etwa so aussehen:


var query = DeineDaten
    .GroupBy(x => x.Id,
             (k, g) => g.Aggregate((a, x) => (x.TimeStamp > a.TimeStamp ) ? x : a));

Es gibt ein cooles Tool namens LINQ PAD, schau es Dir doch mal an, damit kann man spielend zum Ergebniss finden 😉

Beste Grüsse

Diräkt

Edit :

ggf. einfacher wäre (ohne Aggregate):


var result= yourData.GroupBy(x => x.Id)
           .Select(y => y.OrderByDescending(z => z.TimeStamp).First()).ToList();