2016-05-28 5 views
3

Betrachten Sie die einfache Klassedie neueste Eintrag des Tages auswählen

public class Data 
{ 
    public DateTime Date; 
    public object Content; 
} 

Jetzt habe ich eine IEnumerable<Data> genannt datas und ich möchte Linq die älteren Artikel des Tages heraus zu sortieren. So, dass, wenn es Artikel vom selben Tag gibt, ich nur am letzten Artikel dieses Tages interessiert bin.

Ist dies mit Linq möglich?

Antwort

4

Hier ist, wie Sie es tun können:

var result = 
    datas 
    //Group by day (we don't include time here) 
    .GroupBy(x => x.Date.Date) 
    //For each group (day), get most recent item (we include time here) 
    .Select(g => g.OrderByDescending(x => x.Date).First()) 
    .ToList(); 

Weitere Lesbarkeit, können Sie auch x.TimeOfDay statt x.Date in der Select Anweisung verwenden. diese

+0

Dank. Das scheint zu funktionieren! – Matthias

+0

Eine zusätzliche Frage: Ist es möglich, die "sql" ähnliche Syntax zu verwenden, um diesen Code-Frieden zu schreiben? ala: 'var result = aus Daten in Daten .... wähle Daten' – Matthias

+0

Ich benutze keine SQL Syntax. Ich bin mir also nicht sicher, ob Sie alles in diese Syntax übersetzen können. Ich bin nicht sicher, ob es besser gemacht werden kann, dass dies: 'von Daten in der Datengruppe Daten durch data.Date.Date in g wählen g.OrderByDescending (x => x.Date.TimeOfDay) .First()' –

2

Verwendung:

var result = from x in datas 
     group x by x.Date.Date into g 
     select g.OrderByDescending(x => x.Date).FirstOrDefault(); 

Oder

var result = datas.GroupBy(x => x.Date.Date) 
      .Select(g => g.Where(x => x.Date == g.Max(y => y.Date)) 
      .First()); 
+0

Der Typ von 'x' ist' Data', nicht 'DateTime'. –

+0

Sie müssen 'Date' aus' x' auswählen und dann 'Max' aufrufen. –

+0

@YacoubMassad Sie meinen 'x.Date.Max()'? –

Verwandte Themen