Entity Framework 第六篇 分页查询

目前分页支持单表

public IList<TEntity> GetPaged<TEntity>(out int total, Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, int index = 1, int size = 20) where TEntity : class
        {
            int skipCount = (index - 1) * size;
            var _reset = Get(filter, orderBy);
            total = _reset.Count();
            _reset = skipCount > 0 ? _reset.Skip(skipCount).Take(size) : _reset.Take(size);
            return _reset.ToList();
        }

        public IQueryable<TEntity> Get<TEntity>(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null) where TEntity : class
        {
            IQueryable<TEntity> query = dbContext.Set<TEntity>();
            if (filter != null)
            {
                query = query.Where(filter);
            }
            if (orderBy != null)
            {
                return orderBy(query).AsQueryable();
            }
            else
            {
                return query.AsQueryable();
            }
        }

使用

 int count;
            var a = respository.GetPaged<S_Users>(out count, m => m.LoginName.Contains("a"), q => q.OrderBy(m => m.LastDate),1, 20);

是不是很方便?

如何多个排序条件?

var a = respository.GetPaged<S_Users>(out count, m => m.LoginName.Contains("a"), q => q.OrderBy(m => m.LastDate).ThenByDescending(m=>m.LoginNum),1, 20);

 

最后跟踪看一下映射出来的SQL是什么样的?

SELECT 
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT 
        COUNT([Limit1].[C1]) AS [A1]
        FROM ( SELECT TOP (20) [Project1].[C1] AS [C1]
            FROM ( SELECT 
                1 AS [C1], 
                [Extent1].[LastDate] AS [LastDate]
                FROM [dbo].[S_Users] AS [Extent1]
                WHERE [Extent1].[LoginName] LIKE N'%a%'
            )  AS [Project1]
            ORDER BY [Project1].[LastDate] ASC
        )  AS [Limit1]
    )  AS [GroupBy1]


SELECT TOP (20) 
    [Extent1].[UserID] AS [UserID], 
    [Extent1].[LoginName] AS [LoginName], 
    [Extent1].[Password] AS [Password], 
    [Extent1].[UserName] AS [UserName], 
    [Extent1].[UserType] AS [UserType], 
    [Extent1].[Tel] AS [Tel], 
    [Extent1].[CreateDate] AS [CreateDate], 
    [Extent1].[LoginNum] AS [LoginNum], 
    [Extent1].[LastDate] AS [LastDate], 
    [Extent1].[ShopID] AS [ShopID]
    FROM [dbo].[S_Users] AS [Extent1]
    WHERE [Extent1].[LoginName] LIKE N'%a%'
    ORDER BY [Extent1].[LoginName] ASC, [Extent1].[LoginNum] DESC

 

转载于:https://www.cnblogs.com/njcxwz/p/5584081.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值