0
A
回答
2
您可以通過訂購的東西吧,否則你真的不能
所以它會像
mycontext.mytable
.OrderBy(item=>.item.PropertyYouWantToOrderBy)
.Skip(HowManyYouWantToSkip)
.Take(50);
2
LINQ
東西是基於單向枚舉的概念,所以查詢都開始在開始。爲了實現分頁,你將不得不使用Skip
和Take
擴展隔離您感興趣的項目:
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
條記錄並倒轉再次。根據您設置的排序順序和所涉及的數字大小,這可能比僅僅將一堆數據拉回並在內存中進行過濾要昂貴得多。
分頁結果很大程度上取決於訂單。因此,請始終堅持一定的順序,以確保一切都同步。我真的不明白你的問題。如果它涉及從1 LINQ分頁的結果,那麼你只需要保存一個LINQ(只是一個查詢 - 不是本地列表),並通過不同的跳過和獲取數字來提供不同的頁面。 – Hopeless