2013-03-30 16 views
17

Oto mój kod,Get top 5 wartości z kwerendy lambda

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

biorę dane z bazy Ogłoszenia z lambda i powiązać te dane do repeatera ASP.NET (rptAnnouncement).

Ale to zapytanie zwraca wszystkie dane, chcę tylko uzyskać 5 najlepszych (pierwszych 5) rekordów takich jak select top 5 * from database serwera MS SQL Server.

+0

Możliwy duplikat [LINQ kwerendy wybrać piątce] (http://stackoverflow.com/questions/4872946/linq-query-to-select-top-five) –

Odpowiedz

46

Można użyć OrderBy() zamówić elementy, a następnie Take() do podjęcia pierwszej 5.

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

Uwagi

  • Można malejącej przy użyciu OrderByDescending()
  • Wywołanie ToList() a następnie wywołanie Take() dostanie wszystkie elementy, a następnie podjąć top 5, a nie tylko uzyskiwanie górną 5.
+0

Dzięki, zapomniałem zamówić według daty: D – zey

+0

ha ha: D. nawiasem mówiąc Daniel, jak mogę ustawić (rosnąco, malejąco) na zamówienie! – zey

+2

'OrderByDescending()' –

5

Jeśli chcesz tylko Top 5, możesz skorzystać z poniższych.

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

Więcej szczegółów tutaj

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

+0

Dlaczego 'Toli st(). Take (5) 'a nie' Take (5) .ToList() '? – dtb

+0

Tak, punkt jest bardziej wydajny. –

2

Wystarczy użyć Take(n) w LINQ

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

Powinno być .Take (5) .ToList(), a nie odwrotnie. –

+0

@ofstream naprawiony :) –

Powiązane problemy