Where方法中,指定bool变量(非表达式)作为条件生成的sql语句有问题 返回

SqlSugar 沟通中
7 397

例如:

1. 场景1

var isAutoReg = true;

var bb = db.Queryable<RecipeEntity, RecipeDetailEntity, UsageEntity>((rp, det, u) => new object[]

   {

                                JoinType.Inner, det.RecipeId == rp.RecipeId && rp.Status == 2,

                                JoinType.Inner, u.UsageId == det.UsageRouteId,

   }).Where((rp, det, u) => rp.ClinicId == clinicId && rpDetailIds.Contains(det.RecipeDetId))

    .Where((rp, det, u) => u.Category == 2 ||

    u.Category == 3 || u.Category == 4

    || (isAutoReg && det.IsSkinTest == 1 && det.SkinTestSign == 3))

    .Any();

直接使用isAutoReg (true)作为条件,生成的sql语句有问题,sql如下:

SELECT  TOP 1 1 FROM [CT_Recipe] [rp] WITH(NOLOCK)  Inner JOIN [CT_RecipeDetail] [det] WITH(NOLOCK) ON (( [det].[RecipeId] = [rp].[RecipeId] ) AND ( [rp].[Status] = 2 ))  Inner JOIN [Sys_Usage] [u] WITH(NOLOCK) ON ( [u].[UsageId] = [det].[UsageRouteId] )   WHERE (( [rp].[ClinicId] = N'1111' ) AND  ([det].[RecipeDetId] IN ('111','22')) )  AND (((( [u].[Category] = 2 ) OR ( [u].[Category] = 3 )) OR ( [u].[Category] = 4 )) OR (( 1 AND( [det].[IsSkinTest] = 1 )) AND ( [det].[SkinTestSign] = 3 )))

不能正确生成1 = 1 条件,会直接生成一个1


2. 场景2,改写成isAutoReg  == true 能生成正确的:1 = 1

3. 场景3,改写成isAutoReg  == false 生成正确的:1 = 0

ConsoleApp11.zip


热忱回答7

  • 前提: isAutoReg是true

    || (isAutoReg && det.IsSkinTest == 1 && det.SkinTestSign == 3)) 这个位置如果写的是:!isAutoReg 

    他会生成 NOT 1,他不会计算这个表达式的最终值是true,还是false,然后对应的去生成1=1或1=0...他是完全的翻译: !  翻译成NOT ;true翻译成1;false翻译成0.。。

    所以,写成 isAutoReg == true,可以翻译成 1 == 1 ;成 isAutoReg == 0 翻译成 1==0

    如果: isAutoReg是false

    写 isAutoReg == true 会翻译成:0 == 1;写成 0== 0 

    0 回复
  • fate sta fate sta VIP0
    2025/8/19

    处理中

    0 回复
  • fate sta fate sta VIP0
    2025/8/19

    SqlSugarCore 5.1.4.200-preview31


    已修复

    0 回复
  • @fate sta:老师你没有处理!逻辑吗?

    image.png

    !逻辑,没有按照最终的bool值,生成true: 1=1   false:1=0  而是生成的NOT  1

    image.png

    0 回复
  • fate sta fate sta VIP0
    2025/8/19

    这个我看一下

    0 回复
  • fate sta fate sta VIP0
    2025/8/19

    SqlSugarCore 5.1.4.200-preview32

    已处理

    0 回复
  • @fate sta:谢谢, 测试全部通过

    0 回复