如恶化自定义函数Expression转化为sql

发布时间:2021-10-12 13:50:36 作者:iii
来源:亿速云 阅读:145

这篇文章主要介绍“如恶化自定义函数Expression转化为sql”,在日常操作中,相信很多人在如恶化自定义函数Expression转化为sql问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如恶化自定义函数Expression转化为sql”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

      一.首先建立一个建一个扩展类,控制只能允许这些函数出现,如果出现其他函数就直接报异常。

如恶化自定义函数Expression转化为sql

1  public static class SQLMethods
 2     {
 3         public static bool DB_In<T>(this T t, List<T> list)  // in
 4         {
 5             return true;
 6         }
 7         public static Boolean DB_NotIn<T>(this T t, List<T> list) // not in
 8         {
 9             return true;
10         }
11         public static int DB_Length(this string t)  // len();
12         {
13             return 0;
14         }
15         public static bool DB_Like(this string t, string str) // like
16         {
17             return true;
18         }
19         public static bool DB_NotLike(this string t, string str) // not like 
20         {
21             return true;
22         }
23     }

View Code

   我们要生成sql,那么函数的返回值没有意思,len() ,like,和not 只能针对字符串类型, in 和not in 可以针对所有类型。

  二.处理不同函数相关的逻辑。

     1.判断函数所在类的命名空间是否我是我们要求的。

       2.根据函数名处理。出现意外函数抛出异常

    代码如下"

如恶化自定义函数Expression转化为sql

1  private string DealMethodsCall(MethodCallExpression m_exp)
 2         {
 3             var k = m_exp;
 4             var g = k.Arguments[0];
 5             /// 控制函数所在类名。
 6             if (k.Method.DeclaringType != typeof(SQLMethods))
 7             {
 8                 throw new Exception("无法识别函数");
 9             }
10             switch (k.Method.Name)
11             {
12                 case "DB_Length":
13                     {
14                         var exp  = k.Arguments[0];
15                         return "LEN(" + DealExpression(exp) + ")";
16                     }
17                 case "DB_In":
18                 case "DB_NotIn":
19                     {
20                         var exp1 = k.Arguments[0];
21                         var exp2 = k.Arguments[1];
22                         string methods = string.Empty;
23                         if (k.Method.Name == "In")
24                         {
25                             methods = " IN ";
26                         }
27                         else
28                         {
29                             methods = " NOT IN ";
30                         }
31                         return DealExpression(exp1) + methods + DealExpression(exp2);
32                     }
33                 case "DB_Like":
34                 case "DB_NotLike":
35                     {
36                         var exp1 = k.Arguments[0];
37                         var exp2 = k.Arguments[1];
38                         string methods = string.Empty;
39                         if (k.Method.Name == "DB_Like")
40                         {
41                             methods = " LIKE ";
42                         }
43                         else
44                         {
45                             methods = " NOT LIKE ";
46                         }
47                         return  DealExpression(exp1) + methods + DealExpression(exp2);
48 
49                     } 
50             }
51             ///   未知的函数
52             throw new Exception("意外的函数");
53         }

处理相关函数

    三. 调试结果

  如恶化自定义函数Expression转化为sql

到此,关于“如恶化自定义函数Expression转化为sql”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Sql server 转 mysql
  2. spark-sql 自定义函数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

expression sql

上一篇:php中setcookie参数有什么用

下一篇:如何基于Serverless借助微信公众号简单管理用户激活码

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》