扩展函数参数化 返回

SqlSugar
12 99
该叫什么 Ρjˊ 发布于1周前
悬赏:0 飞吻

定义:

    var expMethods = new List<SqlFuncExternal>

            {

                new() { UniqueMethodName = "FullIn", MethodValue = (expInfo, dbType, expContext) => $" match({expInfo.Args[0].MemberName}) against ({expInfo.Args[1].MemberName} IN BOOLEAN MODE)" }

            };

使用:
var where = ExpressionProvider.Create<Shop>().AndIf(req.Filters.ShopName.IsNotNullOrEmpty(), (sp) => DbContext.FullIn(sp.Name, req.Filters.ShopName)).ToExpression();


但是这样有注入问题:

SELECT * FROM SHOP  WHERE  match(`shop`.`Name`) against ('*A*' in BOOLEAN MODE);delete from m--*' IN BOOLEAN MODE) 


请问如何将扩展函数参数化?

热忱回答12

  • expMethods = ListSqlFuncExternal= = expInfo=> expInfo..expInfo..


    0 回复
  • var expMethods = new List<SqlFuncExternal>

                {

                    new() { UniqueMethodName = "FullIn", MethodValue = (expInfo, dbType, expContext) => $" match({expInfo.Args[0].MemberName}) against ({expInfo.Args[1].MemberName} IN BOOLEAN MODE)" }

                };


    0 回复
  • @Ρjˊ:memername你拿到的就是参数化好的 

    0 回复
  • @fate staimage.png


    并没有.

    0 回复
  • 你这个是写的吧,参数是变量传进来的吗

    0 回复
  • 你可以发一下你的C#调用代码看一下

    0 回复
  • image.png


    是的,我就是不知道这里要怎么参数化传进去?

    @fate sta

    0 回复
  • 因为可能是 *ARG*, +ARG,怎么通用?是不是只能扩展多个,在SqlFunExtenal里写死,传递req.Filters.ShopName?

    0 回复
  • 你直接传参数不要用 $

    0 回复
  • @fate sta:好我试试

    0 回复

  • SET @MethodConst0 = '文';

    SELECT

    FROM

    `m_shop` shop

    WHERE

    MATCH ( `shop`.`Name` ) against (@MethodConst0 IN BOOLEAN MODE ) 



    现在可以了,但是顺便请教这样需要加操作符,mysql应是什么写法? 


    还是说只能先处理

    req.Filters.ShopName = req.Filters.ShopName ?? $"*{req.Filters.ShopName}*";

    再往里传

    var where = ExpressionProvider.Create<Shop>().AndIf(req.Filters.ShopName.IsNotNullOrEmpty(), (sp) => DbContext.FullIn(sp.Name, req.Filters.ShopName)).ToExpression();



    0 回复
  • @Ρjˊ:多个参数就行了

    0 回复