2010-10-23 59 views
1

Is .Skip()。Take()是在Entity Framework中進行分頁的唯一方法嗎?有什麼方法可以在輸出中選擇行號,所以我可以使用Where(p => p.row > 9 && p.row <21)實體框架4:將Microsoft SQL 2005/2008 row_number轉換爲字段的C#代碼?

select top 100 ROW_NUMBER() over (order by ID) as row, * 
from myTable 

我會認爲ROW_NUMBER()字段必須在生成的SQL存在的是要知道哪些內容可以跳過行,並採取。

當然,我可以通過創建單獨的SQL視圖與該字段,或者我可以指定確切的SQL到EF,但我真的想要使用Linq表達式。

回答

1

Linq to實體只能與映射到實體的字段一起工作。因此,如果您在實體中構建SQL視圖並將包含row_number的列映射到行字段,那麼您將能夠做到這一點,否則不能。

+0

因此,我認爲如果人們沒有從存儲庫返回IQueryable,那麼人們會用skip和take參數重載他們的存儲庫函數。使用row_number設置視圖的問題將預先確定排序順序。因此,排序順序也需要在存儲庫中處理。我想這並不算太壞,因爲Orderby需要一個Lambda。您可以考慮所有這些嚴格的要求,即可以簡單地下載和使用存儲庫。現在我要去找那個下載了。 :) 感謝您的回答。 – 2010-10-24 14:35:25

+0

是的,我認爲使用'Skip'和'Take'是標準的。 – Gabe 2010-10-24 15:51:57

+0

這也意味着將您的SQL查詢延遲到您的存儲庫之外是標準的,這也意味着如果您訪問.Count然後單獨訪問這些元素,則可以運行相同的查詢兩次。 – 2010-10-24 23:41:50