2012-06-04 33 views
36

我使用Linq/EF4.1從數據庫中提取一些結果並希望將結果限制爲(X)最新結果。其中X是用戶設定的數字。限制從Linq列表中返回的結果的數目

有沒有辦法做到這一點?

如果這將有助於限制結果集,我目前將它們作爲List傳回。雖然我可以通過循環來限制這一點,直到我點擊X時,我只是假設不會傳遞額外的數據。

以防萬一它是相關的... 從SQL Server數據庫運行的C#MVC3項目。

+3

你在問linq「take(100)」嗎? – daryal

回答

69

使用Take功能

​​

假設listOfItems是你的實體對象的列表和CreatedDate是具有日創造的價值(這裏使用的下降得到最新項目做訂單)的字段。

Take()函數從 序列的開始處返回指定數量的連續元素。

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

+1

「最近的結果」 - 這不是你的答案。 –

+0

@ Mr.TA:啊!我錯過了那部分。現在更新。感謝您指出。 – Shyju

+1

雖然我並不需要最近一部分的幫助(我把這個問題描述得很差),但是這是我所需要的!謝謝! – Jared

17
results = results.OrderByDescending(x=>x.Date).Take(10); 

的OrderByDescending將整理您的日期/時間屬性(你想用它來獲得最新的或W/E邏輯)和Take將限制第一X項目(第一批項目最近,由於訂購)。

編輯:要返回某些行不從第一個行,請使用Skip()

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10); 
+1

是否可以從某些索引開始獲得結果?例如,一百個結果 - 從索引50開始,取10個結果,從50到60? – FrenkyB

+2

@FrenkyB請看答案 - 我更新了它來解決你的後續問題。 –

+0

精彩,非常感謝:) – FrenkyB

10

使用Take(),轉換成一個列表中。這樣EF可以優化它創建的查詢,並只返回你需要的數據。

+1

請您多說一點。也許有一個例子? –

+1

@ W.M。先使用Take將允許EF在SQL查詢中執行分頁。如果首先執行ToList,則所有結果都將從SQL中撤回,然後將在內存中完成分頁。 – RedFilter