Expression 转化为sql(三) --自定义函数
SQL 语句有很多函数如len(),now()等等。如何来生成这些函数。最近研究也写办法共大家参考。
一.首先建立一个建一个扩展类,控制只能允许这些函数出现,如果出现其他函数就直接报异常。
public static class SQLMethods
{
public static bool DB_In<T>(this T t, List<T> list) // in
{
return true;
}
public static Boolean DB_NotIn<T>(this T t, List<T> list) // not in
{
return true;
}
public static int DB_Length(this string t) // len();
{
return ;
}
public static bool DB_Like(this string t, string str) // like
{
return true;
}
public static bool DB_NotLike(this string t, string str) // not like
{
return true;
}
}
我们要生成sql,那么函数的返回值没有意思,len() ,like,和not 只能针对字符串类型, in 和not in 可以针对所有类型。
二.处理不同函数相关的逻辑。
1.判断函数所在类的命名空间是否我是我们要求的。
2.根据函数名处理。出现意外函数抛出异常
代码如下"
private string DealMethodsCall(MethodCallExpression m_exp)
{
var k = m_exp;
var g = k.Arguments[];
/// 控制函数所在类名。
if (k.Method.DeclaringType != typeof(SQLMethods))
{
throw new Exception("无法识别函数");
}
switch (k.Method.Name)
{
case "DB_Length":
{
var exp = k.Arguments[];
return "LEN(" + DealExpression(exp) + ")";
}
case "DB_In":
case "DB_NotIn":
{
var exp1 = k.Arguments[];
var exp2 = k.Arguments[];
string methods = string.Empty;
if (k.Method.Name == "In")
{
methods = " IN ";
}
else
{
methods = " NOT IN ";
}
return DealExpression(exp1) + methods + DealExpression(exp2);
}
case "DB_Like":
case "DB_NotLike":
{
var exp1 = k.Arguments[];
var exp2 = k.Arguments[];
string methods = string.Empty;
if (k.Method.Name == "DB_Like")
{
methods = " LIKE ";
}
else
{
methods = " NOT LIKE ";
}
return DealExpression(exp1) + methods + DealExpression(exp2); }
}
/// 未知的函数
throw new Exception("意外的函数");
}
处理相关函数
三. 调试结果
最近把ExpressionToSQL 类已整理出来,供大家下载参考。
Expression 转化为sql(三) --自定义函数的更多相关文章
- SQL Server 自定义函数(Function)——参数默认值
sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Functio ...
- sql server 自定义函数的使用
sql server 自定义函数的使用 自定义函数 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函 ...
- 13、SQL Server 自定义函数
SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值 ...
- 也来谈谈SQL SERVER 自定义函数~
在使用SQL SERVER 数据库的时候,函数大家都应该用过,简单的比如 系统聚合函数 Sum(),Max() 等等.但是一些初学者编写自定义函数的时候,经常问起什么是表值函数,什么是标量值函数. 表 ...
- SQL强化(三) 自定义函数
---恢复内容开始--- Oracle中我们可以通过自定义函数去做一些逻辑判断,这样可以减少查询语句,提高开发效率 create -- 创建自定义函数 or replace -- 有同名函数就替换, ...
- SQL Server自定义函数( 转载于51CTO )
用户自定义函数自定义函数不能执行一系列改变数据库状态的操作,可以像系统函数在查询或存储过程等的程序中使用,也可以像相信过程一样能过 execute 命令来执行.自定义函数中存储了一个 Transact ...
- sql server自定义函数学习笔记
sql server中函数分别有:表值函数.标量函数.聚合函数.系统函数.这些函数中除系统函数外其他函数都需要用户进行自定义. 一.表值函数 简单表值函数 创建 create function fu_ ...
- SQL Function 自定义函数
目录 产生背景(已经有了存储过程,为什么还要使用自定义函数) 发展历史 构成 使用方法 适用范围 注意事项 疑问 内容 产生背景(已经有了存储过程,为什么还要使用自定义函数) 与存储过程的区别(存 ...
- SQL server 自定义函数FUNCTION的使用
原文链接:https://blog.csdn.net/lanxingbudui/article/details/81736402 前言: 在SQL server中不仅可以可以使用系统自带 ...
随机推荐
- MySQL中字符串与数字比较的坑
公司项目代码中,某枚举字段数据库表中类型是char(1),在代码中,误以为是TINYINT,所以用数字筛选,后来发现结果不对.发现了一个现象,用数字0筛选会把所有的记录给筛选出来. 经过排查发现是在M ...
- elasticsearch基础概念
接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒). 集群(clu ...
- SQL检索记录
<<第一章检索记录>>:关于表使用SELECT语句和特殊字符"*": *:SELECT * from emp; 1:分别列出每一行:SELECT empno ...
- <CentOS7>如何设置hostname
在CentOS/RHEL 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置: ceph@client-node ~]$ hostnamectlstatus Stat ...
- systemtap原理及使用
SystemTap的架构 SystemTap用于检查运行的内核的两种方法是 Kprobes和 返回探针.但是理解任何内核的最关键要素是内核的映射,它提供符号信息(比如函数.变量以及它们的地址).有了内 ...
- 使用window.btoa和window.atob来进行Base64编码和解码
方法描述 WindowBase64.atob() 函数用来解码一个已经被base-64编码过的数据. WindowBase64.btoa() 函数 将ascii字符串或二进制数据转换成一个base ...
- linux下归档、解压缩工具:tar命令
tar是一个类似于windows下的解压缩工具,可以将一大堆文件或目录打包成一个文件,还可以通过特定选项使用压缩工具进行解压缩. 语法: tar (选项) (参数) 常用选项: -c:创建打包文件. ...
- Python—课时ONE
说实话第一次接触Python还是在我刚上班的时候,听说很多人这个开发语言很吊,应用的领域很多.but这些东西还不能够吸引我,真正的原因是因为这个开发语言很是简单,比较适合我这种2B学的.但是越往后越觉 ...
- CentOS系统搭建gitolite服务
1.安装相关支持软件 a.$yum install perl-Time-HiRes openssh-server perl -y b.$yum -y install git 2.服务端操作:创建git ...
- Tomcat Server处理一个http请求过程
假设来自客户端的请求为: http://localhost:8080/lizhx/lizhx_index.jsp 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Conne ...