2013-03-30 6 views
17

Hier ist mein Code,Erhalten Sie Top-5-Werte mit Lambda-Abfrage

rptAnnouncement.DataSource = DbContext.Announcements 
    .Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date) 
    .ToList(); 

ich die Ansagen Daten aus der Datenbank mit Lambda nehmen und binden diese Daten an ASP.NET Repeater (rptAnnouncement).

Aber diese Abfrage gibt alle Daten zurück, ich möchte nur die Top 5 (ersten 5) Datensätze wie MS SQL Server select top 5 * from database erhalten.

+0

Mögliche Duplikat (http://stackoverflow.com/questions/4872946/linq-query-to-select-top-five) –

Antwort

46

Sie können OrderBy() verwenden, um die Elemente zu bestellen und dann Take() die ersten 5.

rptAnnouncement.DataSource = DbContext.Announcements 
    .Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date) 
    .OrderBy(n => n.Expire_Date.Value.Date) 
    .Take(5); 

Notizen zu machen

  • können Sie absteigender Reihenfolge nach mit OrderByDescending()
  • ToList() aufrufen und dann Take() Aufruf werden alle Elemente erhalten und dann die Top-5 nehmen im Gegensatz zu nur die obere 5.
+0

Danke, ich vergesse, nach Datum zu bestellen: D – zey

+0

ha ha: D. übrigens Daniel, wie kann ich (aufsteigend, absteigend) bestellen! – zey

+2

'OrderByDescending()' –

5

Wenn Sie nur die Top 5 möchten, können Sie die folgenden verwenden.

rptAnnouncement.DataSource = DbContext.Announcements.Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date).Take(5).ToList(); 

Weitere Details hier

http://msdn.microsoft.com/en-us/library/bb503062.aspx

+0

Warum 'toli [LINQ-Abfrage Top fünf wählen] st(). Nimm (5) 'und nicht' Take (5) .ToList() '? – dtb

+0

Ja Punkt effizienter genommen. –

2

einfach immer verwenden Take(n) in LINQ

rptAnnouncement.DataSource = DbContext.Announcements 
             .Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date) 
             .Take(5).ToList(); 
+1

Es sollte sein. Nehmen Sie (5) .ToList(), nicht das Gegenteil. –

+0

@ofstream behoben :) –

Verwandte Themen