随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

[转]MVC 分页

本内容代码段抄自传智视频

复制代码
/// <summary>
/// 数据库分页
/// </summary>
static List<dynamic> GetPageList<T, TKey>(Expression<Func<T, dynamic>> select, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderLambda, int pageSize, int pageIndex, out int total, bool isAsc)
    where T : class
{
    StudyDBEntities context = new StudyDBEntities();
    total = context.Set<T>().Where(whereLambda).Count();
    var result = context.Set<T>().Where(whereLambda);
    if (isAsc)
        result = result.OrderBy(orderLambda);
    else
        result = result.OrderByDescending(orderLambda);
    return result.Skip(pageSize * (pageIndex - 1)).Take(pageSize).Select(select).ToList();
}
复制代码

其中 total 返回符合条件的总行数

result 返回符合条件的数据

使用:

int total = 0;
var list = GetPageList<Student, int>(o => o, o => o.ID > 2, o => o.ID, 5, 5, out total, true);

 

ViewData.Model = 实体
    .OrderBy(u => u.UserId)
    .Skip(pageSize * (pageIndex - 1))
    .Take(pageSize)
    .AsEnumerable();

 

SQL 生成如下:

SELECT 
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT 
        COUNT(1) AS [A1]
        FROM [dbo].[Student] AS [Extent1]
        WHERE [Extent1].[ID] > 2
    )  AS [GroupBy1]

 

复制代码
SELECT TOP (5) 
[Filter1].[ID] AS [ID], 
[Filter1].[Name] AS [Name], 
[Filter1].[Class] AS [Class]
FROM ( SELECT [Extent1].[ID] AS [ID], [Extent1].[Name] AS [Name], [Extent1].[Class] AS [Class], 
    row_number() OVER (ORDER BY [Extent1].[ID] ASC) AS [row_number]
    FROM [dbo].[Student] AS [Extent1]
    WHERE [Extent1].[ID] > 2
)  AS [Filter1]
WHERE [Filter1].[row_number] > 20
ORDER BY [Filter1].[ID] ASC
复制代码

 

posted on   z5337  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示