自定义扩展函数,生成SQL错误 返回

SqlSugar 老数据
3 1260
该叫什么 子期 发布于2023/2/17
悬赏:5 飞吻

public static List<SqlFuncExternal> ExpMethods = new List<SqlFuncExternal>

    {

        new SqlFuncExternal()

        {

            UniqueMethodName = "SqlServerJsonContains",

            MethodValue = (expInfo, dbType, expContext) =>

            {

                var value = string.Empty;

                switch (dbType)

                {

                    case DbType.SqlServer:

                        value = string.Format("(EXISTS(SELECT * FROM OPENJSON({0}) WHERE value = {1} AND {2}={2}))"

                            , expInfo.Args[0].MemberName

                            , expInfo.Args[2].MemberValue

                            , expInfo.Args[1].MemberName);


                        return value ;

                    default:

                        throw new Exception("未实现");

                }

            }

        },

    };


    public static String SqlServerJsonContains(object json, object key, object value)

    {

        //这里不能写任何实现代码,需要在上面的配置中实现

        throw new NotSupportedException("Can only be used in expressions");

    }



调用后,生成的sql语句会加上一个(.)


SELECT * FROM [table] [gs].  WHERE (( [gs].[GoodsID] = [g].[GoodsID] )   

  AND EXISTS(SELECT * FROM OPENJSON([gs].[GoodsTypeID]) WHERE value = 4 AND gs.GoodsSpecID=gs.GoodsSpecID))


热忱回答(3)

  • fate sta fate sta VIP0
    2023/2/17

    提供一下完整代码

    0 回复
  • 子期 子期 VIP0
    2023/2/20

    SqlFuncTest.zip

    代码在附件


    原因是自定义函数中FROM关键词大小写生成的问题,详细信息看代码附件。

    0 回复
  • fate sta fate sta VIP0
    2023/2/20

    SqlSugarCore 5.1.3.52-preview02


    更新到最新预览版本已修复

    0 回复