我工作的項目有實體框架上的OData層的頂部。 Odata圖層將其服務器端分頁轉換爲值爲75
。我對這個主題的閱讀使我相信,這個分頁值是全面使用的,而不是每個表的基礎。我目前希望從提取所有數據表,當然,超過75行。使用實體框架,我的代碼只是這樣的:實體框架+ ODATA:側步執行分頁
public IQueryable<ProductColor> GetProductColors()
{
return db.ProductColors;
}
其中db
是實體環境。這是返回前75個記錄。我讀的東西在那裏我可以一個參數inlinecount
集追加到allpages
給我下面的代碼:
public IQueryable<ProductColor> GetProductColors()
{
return db.ProductColors.AddQueryOption("inlinecount","allpages");
}
然而,這也將返回75行!
誰能闡明瞭如何真正得到所有的記錄,而不管的的OData服務器端分頁的東西?
重要:我無法刪除分頁或將其關閉!在性能受到關注的其他情況下,它非常有價值。
更新: 通過一些搜索我發現一個MSDN描述如何執行此任務。
我很想能夠把它變成一個完整的通用方法,但是,這是親如我能得到一個通用的,而無需使用反射:
public IQueryable<T> TakeAll<T>(QueryOperationResponse<T> qor)
{
var collection = new List<T>();
DataServiceQueryContinuation<T> next = null;
QueryOperationResponse<T> response = qor;
do
{
if (next != null)
{
response = db.Execute<T>(next) as QueryOperationResponse<T>;
}
foreach (var elem in response)
{
collection.Add(elem);
}
} while ((next = response.GetContinuation()) != null);
return collection.AsQueryable();
}
調用它像:
public IQueryable<ProductColor> GetProductColors()
{
QueryOperationResponse<ProductColor> response = db.ProductColors.Execute() as QueryOperationResponse<ProductColor>;
var productColors = this.TakeAll<ProductColor>(response);
return productColors.AsQueryable();
}