我在使用LinqToSQL进行分页+动态排序时遇到了问题。这些是我的示例代码。LinqToSQL +分页+动态排序?
Using db As New MyDataContext(connectionString)
db.Log = new DebuggerWritter
Dim result = db.User.OrderBy(Function(u) u.UserId)
result = result.Skip((pageNo - 1) * pageSize).Take(pageSize)
End Using
这是由LINQToSQL生成的SQL脚本,它只检索特定行记录。
SELECT [t1].[UserId], [t1].[UserName]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[UserId]) AS [ROW_NUMBER], [t0].[UserId], [t0].[UserName]
FROM [dbo].[User] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
但是,如果我执行的动态排序,
Using db As New MyDataContext(connectionString)
db.Log = new DebuggerWritter
Dim result = db.User
For Each s In sortExpressions
Dim expression As Func(Of User, Object) = Function(u) u.[GetType]().GetProperty(s.propertyName).GetValue(u, Nothing)
Select Case s.SortOrder
Case SortExpression.SortDirection.Ascending
result = result.OrderBy(expression).AsQueryable
Case SortExpression.SortDirection.Descending
result = result.OrderByDescending(expression).AsQueryable
End Select
Next
result = result.Skip((pageNo - 1) * pageSize).Take(pageSize)
End Using
这是此时产生的SQL脚本,
SELECT [t0].[UserId], [t0].[UserName]
FROM [dbo].[User] AS [t0]
怎么来寻呼控制脚本不产生和排序是走了?那我实现动态排序的方式是错误的吗?或者LinqToSQL不支持分页+动态排序? 帮助!!!
谢谢,它真的为我工作。 – Kevin 2010-03-15 02:32:45