千家信息网

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

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"如恶化自定义函数Expression转化为sql",在日常操作中,相信很多人在如恶化自定义函数Expression转化为sql问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2025年11月07日如恶化自定义函数Expression转化为sql

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

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

1  public static class SQLMethods 2     { 3         public static bool DB_In(this T t, List list)  // in 4         { 5             return true; 6         } 7         public static Boolean DB_NotIn(this T t, List 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) // like16         {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.根据函数名处理。出现意外函数抛出异常

    代码如下"

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(" + Deal_Expression(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                         else28                         {29                             methods = " NOT IN ";30                         }31                         return Deal_Expression(exp1) + methods + Deal_Expression(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                         else44                         {45                             methods = " NOT LIKE ";46                         }47                         return  Deal_Expression(exp1) + methods + Deal_Expression(exp2);48 49                     } 50             }51             ///   未知的函数52             throw new Exception("意外的函数");53         }

处理相关函数

三. 调试结果

  

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

0