发现一个ToPageListAsync的疑似bug,求确认,求解决 返回

C#论坛 老数据
1 3849

sqlsugar版本:5.0.0.11


使用项目:老张的哲学开发的Blog.Core项目,修改了PermissionController下的Get方法:

        [HttpPost]   // 因为要传数组改成了Post
        public async Task<MessageModel<PageModel<Permission>>> Get(int[] Pids, int page = 1, string key = "")
        {

            ...
            
            Expression<Func<Permission, bool>>
                where = (a) => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key))
                && ((Pids == null && 1 == 1) || SqlFunc.ContainsArray(Pids, a.Pid));

            permissions = await _permissionServices.QueryPage(where, page, intPageSize, " Id desc ");
            
            ...
          }

以及BaseRepository中的QueryPage方法:

        public async Task<PageModel<TEntity>> QueryPage(Expression<Func<TEntity, bool>> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null)
        {

            RefAsync<int> totalCount = 0;

            var sql = _db.Queryable<TEntity>()
             .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
             .WhereIF(whereExpression != null, whereExpression)
             .ToSql();

            var list = await _db.Queryable<TEntity>()
             .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
             .WhereIF(whereExpression != null, whereExpression)
             .ToPageListAsync(intPageIndex, intPageSize, totalCount);

            var list1 = await _db.Queryable<TEntity>()
             .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds)
             .WhereIF(whereExpression != null, whereExpression)
             .ToListAsync();

            int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt();
            return new PageModel<TEntity>() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list };
        }


问题描述:

当参数是数组类型时(也就是参数Pids),ToPageListAsync查询返回数据真实条数和totalCount不一致,ToListAsync返回数据正常

Pids=[2];

时,list的数量是50,list1的数量是2

Pids=[2,5];

时,项目直接报错

热忱回答1

  • 问题已解决,使用Expressionable动态拼接lambda表达式的方法没有出现上面描述的问题,一切正常

    0 回复