2015-09-19 69 views
0

我想從linq中的結果集中獲取項目50-100。我怎麼做?使用Linq檢索分頁結果

情況: 我找回了最後一個結果集的最後一項的索引。然後我想抓住下一個50.我沒有最後結果的唯一索引號。

+0

分頁結果很大程度上取決於訂單。因此,請始終堅持一定的順序,以確保一切都同步。我真的不明白你的問題。如果它涉及從1 LINQ分頁的結果,那麼你只需要保存一個LINQ(只是一個查詢 - 不是本地列表),並通過不同的跳過和獲取數字來提供不同的頁面。 – Hopeless

回答

2

您可以通過訂購的東西吧,否則你真的不能

所以它會像

mycontext.mytable 
    .OrderBy(item=>.item.PropertyYouWantToOrderBy) 
    .Skip(HowManyYouWantToSkip) 
    .Take(50); 
2

LINQ東西是基於單向枚舉的概念,所以查詢都開始在開始。爲了實現分頁,你將不得不使用SkipTake擴展隔離您感興趣的項目:

int pageSize = 50; 
// 0-based page number 
int pageNum = 2; 
var pageContent = myCollection.Skip(pageSize * pageNum).Take(pageSize); 

當然,這只是設置了一個IEnumerable<T>的是,列舉時,將通過myCollection 100倍步驟,然後在關閉之前開始返回數據50個步驟。

如果您正在處理可以多次枚舉的東西,那麼這很好,但是如果您使用只枚舉一次的源,則不會。但是,無論如何,您無法真實地在這種枚舉上實現分頁,您至少需要一箇中間存儲器來存儲您已經使用的那部分內容。

在LINQ to SQL中,這會產生一個查詢,它只會嘗試選擇您要求的50條記錄,這些記錄將基於numSkip + numTake記錄,顛倒排序順序,取numTake條記錄並倒轉再次。根據您設置的排序順序和所涉及的數字大小,這可能比僅僅將一堆數據拉回並在內存中進行過濾要昂貴得多。