redmethod 2022-03-15 17:30
浏览 39
已结题

SqlSugar Lamda查询时生成的语句有问题,前后窜了

问题遇到的现象和发生背景

.net core web 使用 sqlsugar 这个 orm 是不定时的会出现以下问题

第一次生成的查询记录列表,生成的语句为

SELECT id,upid,level,name,type,size,dir,creater,create_date,editer,edit_date

       FROM `tb_file`  

      WHERE ( `dir` = @dir0 )  AND ( `upid` = @upid1 )ORDER BY `id` ASC

第二次查询单个记录时(**db.GetById(id)**)为什么生成的语句为

SELECT id,upid,level,name,type,size,dir,creater,create_date,editer,edit_date

FROM (SELECT id,upid,level,name,type,size,dir,creater,create_date,editer,edit_date

       FROM `tb_file`  

      WHERE ( `dir` = @dir0 )  AND ( `upid` = @upid1 )ORDER BY `id` ASC ) t  

WHERE id IN (@InPara0)

不是应该是

SELECT id,upid,level,name,type,size,dir,creater,create_date,editer,edit_date

FROM tb_file t

WHERE id IN (@InPara0)

为什么会出现嵌套的上一个查询

问题相关代码,请勿粘贴截图

第一次查询的方法为:

        public Tuple<List<tb_file>, int> ListPagin(string dir, int? upid, string name, int? type, ushort? level, string orderName, int? orderType, int page, int page_size)
        {
            ISugarQueryable<tb_file> queryable = _dal.CreateQueryable();
            queryable = queryable.WhereIF(!string.IsNullOrEmpty(dir), p => p.dir == dir);
            queryable = queryable.WhereIF(upid != null, p => p.upid == upid);
            queryable = queryable.WhereIF(!string.IsNullOrEmpty(name), p => p.name.Contains(name));
            queryable = queryable.WhereIF(type != null, p => p.type == type);
            queryable = queryable.WhereIF(level != null, p => p.level == level.Value);
            if (!string.IsNullOrEmpty(orderName) && orderType != null)
            {
                OrderByType obt = orderType.Value == 0 ? OrderByType.Asc : OrderByType.Desc;
                switch (orderName)
                {
                    case "name":
                        queryable = queryable.OrderBy(p => p.name, obt);
                        break;
                    case "size":
                        queryable = queryable.OrderBy(p => p.size, obt);
                        break;
                    case "date":
                        queryable = queryable.OrderBy(p => p.edit_date, obt);
                        break;
                    default:
                        queryable = queryable.OrderBy(p => p.id, OrderByType.Asc);
                        break;
                }
            }
            else
            {
                queryable = queryable.OrderBy(p => p.id, OrderByType.Asc);
            }

            PageModel pm = new PageModel
            {
                PageIndex = page,
                PageSize = page_size
            };
            Tuple<List<tb_file>, int> result = _dal.GetPageListAndTotal(queryable, pm);
            return result;
        }

第二次调用的代码为

db.GetById(id)

以上的问题不定时会发生,时有时无的

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月23日
    • 创建了问题 3月15日

    悬赏问题

    • ¥15 怎么改成循环输入删除(语言-c语言)
    • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
    • ¥15 pyqt5tools安装失败
    • ¥15 mmdetection
    • ¥15 nginx代理报502的错误
    • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
    • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
    • ¥100 描述一下元器件的基本功能,pcba板的基本原理
    • ¥15 STM32无法向设备写入固件
    • ¥15 使用ESP8266连接阿里云出现问题