关于LeftJoin 返回

SqlSugar
6 110
var iFId=11;
var oFId=22;
var opp="032262218212";
var cDir=0;
await Db.Queryable<ACFitem>()
                .LeftJoin<ACFitemdetail>((a,b)=>a.Id==b.ItemId)
                .Where((a, b) => b.Code == opp.Substring(0, b.Code.Length) && a.Dir == (cDir == 0 ? iFId : oFId) && a.Disabled == 0)
                .OrderBy(a=>a.Code)//此处变量名必须和上面一致
                .FirstAsync();

生成的sql 

SELECT  TOP 1 [a].[code],[a].[name],[a].[disabled],[a].[ts],[a].[id],[a].[dir] 
FROM [AcFItem] a Left JOIN [AcFItemDetail] b ON ( [a].[id] = [b].[ItemId] )   
WHERE ((( [b].[code] =LEN([b].[code])SUBSTRING(@MethodConst0,1 + @MethodConst1,Result)) AND ( [a].[dir] =( CASE  WHEN ( @Const3 = @currentDirection4 ) THEN @MethodConst5  ELSE @MethodConst6 END ))) AND ( [a].[disabled] = @Disabled7 ))ORDER BY [a].[code] ASC

((( [b].[code] =LEN([b].[code])SUBSTRING(@MethodConst0,1 + @MethodConst1,Result)) ,这块语句语法错误,想要生成

[b].[code] =SUBSTRING(@MethodConst0,1 + @MethodConst1,LEN([b].[code])),是不是left join 后面的where里不允许实时计算。

热忱回答6

  • 是最新版本吗?,如果是还有这这个问题就先把一个where拆成2个where吧 。我这边先记下来

    0 回复
  • @fate sta:版本是5.1.3.42,我nuget更新到.45 还是一样的错误 (SUBSTRING”附近有语法错误。)。我把subsing 用扩展方法left替代,aop直接不打印对应的sql语句了

    0 回复
  • @fate sta

    var iFId=11;
    var oFId=22;
    var opp="032262218212";
    var cDir=0;
    await Db.Queryable<ACFitem>()
                    .LeftJoin<ACFitemdetail>((a,b)=>a.Id==b.ItemId)
                    .Where((a, b) => b.Code == opp.Substring(0, b.Code.Length))
                    .OrderBy(a=>a.Code)//此处变量名必须和上面一致
                    .FirstAsync();

    我不管其他条件,就这样,还是SUBSTRING”附近有语法错误

    0 回复
  • 目前先暂时查出来,用linq 操作看看。

    0 回复
  • 你先用SqlFunc.Length 我后面修复

    0 回复
  • @fate sta:好的

    0 回复