2013-03-30 8 views
17

Ecco il mio codice,ottenere top 5 valori con interrogazione lambda

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

prendo i dati comunicati database con lambda e associare questi dati di ASP.NET ripetitore (rptAnnouncement).

Ma questa query restituisce tutti i dati, voglio solo ottenere i primi 5 (primi 5) record come quello di MS SQL Server select top 5 * from database.

+0

Eventuali duplicati di [query LINQ per selezionare top five] (http://stackoverflow.com/questions/4872946/linq-query-to-select-top-five) –

risposta

46

È possibile utilizzare OrderBy() per ordinare gli elementi e poi Take() di fare il primo 5.

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

Note

  • È possibile ordinare decrescente utilizzando OrderByDescending()
  • Calling ToList() e quindi chiamando Take() avranno tutti gli elementi e poi prendere la top 5 invece di ottenere solo la parte superiore 5.
+0

Grazie, ho dimenticato di ordinare per data: D – zey

+0

ha ha: D. dal modo in cui Daniel, come posso impostare (ascendente, discendente) per ordinare! – zey

+2

'OrderByDescending()' –

5

Se si desidera solo la Top 5, è possibile utilizzare il seguente.

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

Maggiori dettagli qui

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

+0

Perché 'Toli st(). Take (5) 'e non' Take (5) .ToList() '? – dtb

+0

Sì, il punto è stato preso più efficiente. –

2

Basta usare Take(n) in LINQ

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

Dovrebbe essere .Take (5) .ToList(), non il contrario. –

+0

@ofstream risolto :) –

Problemi correlati