在select中 大写字符串前1位加下划线失效。 返回

SqlSugar 沟通中
10 434


我的是MYSQL:

 public ISugarQueryable<EmsDeviceCheckstdOut> Query()
 {
     ISugarQueryable<EmsDeviceCheckstdOut> queryable = _db.Queryable<EmsDeviceCheckstd,EmsDeviceCheckstdLink,EmsDeviceUsetype>((a,b,c)=> new JoinQueryInfos(
         JoinType.Left,a.Id==b.CheckstdId,
         JoinType.Left,b.UsetypeId==c.Id
         ))
     .Select((a,b,c) => new EmsDeviceCheckstdOut()
     {
         Id = a.Id.SelectAll(),
         Usename=c.Usename,
         UsetypeId=c.Id,
         UserTypeLinkId=c.Id
     }).MergeTable()
     .OrderByDescending(a => a.CreationTime);
     return queryable;
 }
转换出的SQL语句:
SELECT
	* 
FROM
	(
	SELECT
		a.*,
		c.usename AS Usename,
		c.id AS UsetypeId,
		c.id AS UserTypeLinkId 
	FROM
		ems_device_checkstd a
		LEFT JOIN ems_device_checkstd_link b ON ( a.id = b.checkstd_id )
		LEFT JOIN ems_device_usetype c ON ( b.usetype_id = c.id ) 
	WHERE
		( a.is_deleted = 0 ) 
	) MergeTable 
WHERE
	( usetype_id = 498405618450501 ) 
	AND ( is_deleted = 0 ) 
ORDER BY
	creation_time DESC

但是在select 中的 UsetypeId、UserTypeLinkId  并没有变成 usetype_id、User_type_link_id  

热忱回答10

  • 1.不要用   Id = a.Id.SelectAll(),

    改成

       .Select((a,b,c) => new EmsDeviceCheckstdOut()
         {
             
             Usename=c.Usename,
             UsetypeId=c.Id,
             UserTypeLinkId=c.Id
         },true //自动映射
     ).MergeTable()




    0 回复
  • 2.另外DTO要禁用下划线和禁用过滤器

    0 回复
  • 3.Orderby能扔select前面就扔前面,特殊情况才用mergetable

    0 回复
  • @fate sta:多张表关联合并成一张表。

    0 回复
  • @fate sta

     .Select((a,b,c) => new EmsDeviceCheckstdOut()
         {
              
             Usename=c.Usename,
             UsetypeId=c.Id,
             UserTypeLinkId=c.Id
         },true //自动映射
     ).MergeTable()

    但是还是没有解决,UsetypeId 没有变成usetype_id  

    0 回复
  • 去掉MergeTable(), 查询就有问题,


      Expressionable<EmsDeviceCheckstdOut> expressionable = Expressionable.Create<EmsDeviceCheckstdOut>();
      expressionable.AndIF(!string.IsNullOrEmpty(searchquery.Keyword), a => a.Code.Contains(searchquery.Keyword) || a.Checktool.Contains(searchquery.Keyword) || a.Area.Contains(searchquery.Keyword) || a.Checkcontent.Contains(searchquery.Keyword));
      expressionable.AndIF(searchquery.UsetypeId>0, b => b.UsetypeId==searchquery.UsetypeId);
      pagedlist = await _emsDeviceCheckstdService.GetAll(expressionable);

    image.png          

    去掉MergeTable 后,usetypeId 是B表中的字段,

    image.png

    0 回复
  • 我说了3点,你不去掉,就看1和2

    0 回复
  • @fate sta:成为了一个死循环问题:

    使用MergeTable: is_deleted 被转换成 IsDeleted, MergeTable 后就没有is_deleted  查询报错。

    image.png

    image.png

    不用MergeTable情况:

    image.png

    0 回复
  • @西红柿炒鸡蛋:还有疑问提供完整DEMO,不方便解释

    0 回复
  • 我都说了用Mergetable你就看1和2 ,没说不让你用,我是让你禁用DTO 的下划线和过滤器

    0 回复