成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解LINQ to SQL分頁問題 不同版本對比

開發 后端
本文將為大家介紹在.NET 3.5和.NET 4下LINQ to SQL分頁問題的異同,希望對大家了解LINQ有所幫助。

[[12004]]

從 .NET Framework 有了 LINQ,SQL 分頁有了新的選擇,那就是簡單使用 Skip 及 Take 方法。當然,別忘了加上排序。本以為對此沒有什么可懷疑的,殊不知在我們的產品 SE 中卻碰到了很奇怪的一個問題:對某張表的執行分頁查詢,有一條數據在所有分頁中均沒有出現。通過查看真正執行的 SQL 發現,SqlProvider 翻譯的第一頁的 SQL 用的是 TOP N,而其他分頁用的是 ROW_NUMBER 函數 + 范圍限定。多的不說,僅從二者的不同,我就覺得其結果不能劃等號。但是,在另建的測試中,我發現二者結果沒有什么問題。百思不得其解之余,也只能自我安慰說 MS 會保證二者邏輯一致,至于為何用不同的方法,那是出自性能的考慮。

直至今日,突然想起這個問題,就 GOOGLE 了一把,看看是否有同學碰到這樣的問題。結果就找到了: 利用 LINQ to SQL 對資料做分頁時應注意的事 ( 重要 ),其結論就是要注意使用 OrderBy 方法,否則數據邏輯不對。然后按其說的進行了測試,實際情況確實如此,但是我也加了排序,為何還有問題呢?我暫時沒辦法重現這個問題,因為業務數據在變化,現在看來又正常了。

解鈴還需系鈴人,只能期望 MS 在新的版本中解決這個問題了。辦法很簡單:首頁不用 TOP N,而是統一使用 ROW_NUMBER 函數。由于 SE 還服務器端的代碼沒有使用 .NET Framework 4 編譯,所以也就一直沒有嘗試。今天測試了一下,發現在 NF 4.0 中,已經修正了這個問題,結果如下:

  1. SELECT [t1].[ID], [t1].[Name], [t1].[CreateTime]  
  2. FROM (  
  3.     SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ID], [t0].[Name], [t0].[CreateTime]  
  4. AS [ROW_NUMBER], [t0].[ID], [t0].[Name], [t0].[CreateTime]  
  5.     FROM [dbo].[TableA] AS [t0]  
  6.     ) AS [t1]  
  7. WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1  
  8. ORDER BY [t1].[ROW_NUMBER]  
  9. -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [0]  
  10. -- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [5]  
  11. -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1  
  12.  
  13. SELECT [t1].[ID], [t1].[Name], [t1].[CreateTime]  
  14. FROM (  
  15.     SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ID], [t0].[Name], [t0].[CreateTime]  
  16. AS [ROW_NUMBER], [t0].[ID], [t0].[Name], [t0].[CreateTime]  
  17.     FROM [dbo].[TableA] AS [t0]  
  18.     ) AS [t1]  
  19. WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1  
  20. ORDER BY [t1].[ROW_NUMBER]  
  21. -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [5]  
  22. -- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [5]  
  23. -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1 

比對一下:

  1. SELECT TOP (5) [t0].[Name], [t0].[ID], [t0].[CreateTime]  
  2. FROM [dbo].[TableB] AS [t0]  
  3. ORDER BY [t0].[ID]  
  4. -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926  
  5.  
  6. SELECT [t1].[Name], [t1].[ID], [t1].[CreateTime]  
  7. FROM (  
  8.     SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ID]) AS [ROW_NUMBER], [t0].[Name],  
  9. [t0].[ID], [t0].[CreateTime]  
  10.     FROM [dbo].[TableB] AS [t0]  
  11.     ) AS [t1]  
  12. WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1  
  13. ORDER BY [t1].[ROW_NUMBER]  
  14. -- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [5]  
  15. -- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [5]  
  16. -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926 

NF 4.0 出來有一段時間了,只是我比較懶,一直沒有測試過這個問題。直到在看到 LINQ to SQL changes in .NET 4.0 其中提及的 Skip(0) 才有此次測試。所以,還在用 3.5 的兄弟們,趕緊升級到 4.0 吧。

原文標題:LINQ to SQL 分頁問題

鏈接:http://www.cnblogs.com/AutumnalRiver/archive/2010/06/13/1757891.html

【編輯推薦】

  1. Linq匿名類型簡單概述
  2. Linq隨機讀取數據淺析
  3. Linq Lambda表達式全面分析
  4. Linq擴展方法簡單分析
  5. 初探Linq局部變量類型
責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-18 14:51:19

LINQ TO SQL

2009-09-22 09:31:08

LINQ to SQL

2009-09-14 13:17:51

LINQ to SQLLINQ to SQL

2009-09-17 09:24:57

Linq實現分頁

2009-05-11 10:40:36

.NETLINQforeach

2009-09-18 17:17:58

LINQ模型

2010-08-04 09:55:34

LINQ to SQL

2009-09-08 17:27:18

LINQ to Dat

2009-09-08 14:45:24

Linq to SQL支持SQL Serve

2009-09-10 17:44:36

DOM模型INQ模型

2009-09-09 14:40:43

Linq to sql

2009-09-10 11:29:00

LINQ to SQL

2009-09-11 12:08:09

Linq to SQL

2009-09-11 12:13:40

LINQ to SQL

2009-09-15 17:07:24

Linq To SQL

2009-09-16 17:33:16

LINQ TO SQL

2009-09-08 13:16:01

Linq to SQL

2009-09-07 17:09:45

Linq To Sql

2009-09-08 13:07:15

介紹Linq to S

2009-09-10 10:37:15

LINQ to SQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美高清成人 | 中文字幕一区二区三区在线观看 | 中文精品视频 | 成人精品国产一区二区4080 | 国产精品一区二区久久久久 | 精品国产91 | 国产成人精品a视频 | 2023亚洲天堂 | 亚洲一区二区三区四区五区中文 | 天天干狠狠操 | 成人三级网址 | 亚洲精品亚洲人成人网 | 日韩国产欧美一区 | sese视频在线观看 | 中文字幕一区二区视频 | 国产成人99久久亚洲综合精品 | 久久专区 | 国产精品18毛片一区二区 | 色婷婷综合网 | 久久久精品视 | 午夜视频一区二区三区 | 亚洲天堂久久 | 久久免费精品 | 国产精品久久久久久久久久东京 | 久久综合狠狠综合久久综合88 | 国产在线一区观看 | 欧美日韩在线成人 | 免费黄色大片 | 亚洲一二视频 | 日韩成人免费视频 | av一级一片 | 欧美啪啪 | 天天影视色综合 | 最新中文在线视频 | 国产免费观看一级国产 | 人人擦人人干 | 亚洲精品乱码8久久久久久日本 | 97精品久久 | 日韩精品在线播放 | 国产偷久久一级精品60部 | 精品久久不卡 |