SQL Server 2008和EF7(RC1) - 無法跳過()和Take()?


我知道SQL Server 2012及更高版本的分頁有一個新的OFFSET語法,實體框架7似乎將我的LINQ轉換為。

這解釋了為什麼我Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.收到錯誤Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.錯誤的原因Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.因為SQL Server 2008無法識別它。

這個問題中 ,有人回答說我們需要做的就是從RC1開始,在Startup.cs的ConfigureServices()使用.UseRowNumberForPaging() ConfigureServices()

services.AddEntityFramework()
                    .AddSqlServer()
                    .AddDbContext<MyDbContext>(options => {
                        options.UseSqlServer("someConnectionString").UseRowNumberForPaging();                        
                    });

這似乎不起作用。我仍然得到同樣的錯誤。我的猜測是EF7仍然將我的LINQ編譯為新的2012+ SQL語法。該怎麼辦?

熱門答案

你需要使用SQL2012 +來使用skip()。take(),它在sql2008中不起作用。

對於2008年,您可以使用:

select top 20 * from
(
select *,
ROW_NUMBER() OVER (ORDER BY columnid) AS ROW_NUM
from tablename
) x
where ROW_NUM>10




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因