mysql8.0全局过滤器生成的sql语句会添加重复条件 返回

SqlSugar 沟通中
2 112


全局配置软删除条件

db.QueryFilter.AddTableFilter<ISoftDelete>(it => it.IsDeleted == false);


var queryable = Db.Queryable<EquCard>()
    .InnerJoin<EquDictionary>((a, b) => a.DictionaryId == b.Id)
    .LeftJoin<EquManufacturer>((a, b, c) => b.ManufacturerId == c.Id)
    .LeftJoin<EquSupplier>((a, b, c, d) => a.SupplierId == d.Id)
    .LeftJoin<EquInboundHead>((a, b, c, d, e) => e.Id == a.InboundHeadId)
    .WhereIF(!string.IsNullOrWhiteSpace(input.EquName), (a, b, c, d, e) => a.Name.Contains(input.EquName))
    .WhereIF(!string.IsNullOrWhiteSpace(input.EquCardCode), (a, b, c, d, e) => a.Code.Contains(input.EquCardCode))
    .WhereIF(!string.IsNullOrWhiteSpace(input.EquCode), (a, b, c, d, e) => b.Code.Contains(input.EquCode))
    .WhereIF(input.StartTime.HasValue, (a, b, c, d, e) => e.AuditTime >= input.StartTime)
    .WhereIF(input.EndTime.HasValue, (a, b, c, d, e) => e.AuditTime <=input.EndTime)


具体生成的sql语句

SELECT

  `a`.`id` AS `Id`,

  `b`.`code` AS `EquCode`,

  `c`.`name` AS `ManufacturerName`,

  `d`.`name` AS `Supplier`,

  `e`.`code` AS `InboundHeadNUm`

FROM

  `equ_card` `a`

  INNER JOIN `equ_dictionary` `b` ON (`a`.`dictionary_id` = `b`.`id`)

  AND (`b`.`is_deleted` = @IsDeleted0)

  AND (`b`.`is_deleted` = @IsDeleted1)

  LEFT JOIN `equ_manufacturer` `c` ON (`b`.`manufacturer_id` = `c`.`id`)

  AND (`c`.`is_deleted` = @IsDeleted0)

  AND (`c`.`is_deleted` = @IsDeleted1)

  LEFT JOIN `equ_supplier` `d` ON (`a`.`supplier_id` = `d`.`id`)

  AND (`d`.`is_deleted` = @IsDeleted0)

  AND (`d`.`is_deleted` = @IsDeleted1)

  LEFT JOIN `equ_inbound_head` `e` ON (`e`.`id` = `a`.`inbound_head_id`)

  AND (`e`.`is_deleted` = @IsDeleted0)

  AND (`e`.`is_deleted` = @IsDeleted1)

WHERE

  (`a`.`is_deleted` = @IsDeleted0)

  AND (`a`.`is_deleted` = @IsDeleted1)

  LIMIT 0,

  10



怎么这个 `is_deleted`  会生成重复的呢 

热忱回答2

  • 已解决 

    var totalCount = await queryable.CountAsync();
    var skip = (input.PageIndex - 1) * input.PageSize;

    var list = await queryable.Skip(skip).Take(input.PageSize).ToListAsync();

    改成

      RefAsync<int> totalNumber = 0;

      var list = await queryable.ToPageListAsync(input.PageIndex, input.PageSize, totalNumber);


    0 回复
  • 过滤器扔的地方不对,按文档:过滤器,扔到指定地方。

    0 回复