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中不仅可以可以使用系统自带 ...
随机推荐
- UPS对电源故障的处理能力
UPS对电源故障的处理能力 双变换在线式UPS由于其逆变器实时在线工作,因而能对所有的电源故障具有隔离和处理功能.由于目前电网情况发生了很大变化,真正的长时间断电只占所有电源故障的30%甚至更低,而非 ...
- Java设计模式之(建造者模式)
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式通常包括下面几个角色: 1. builder:抽象建造者,给出一个抽象接口,以规范产品对象的各个组 ...
- 1. Skippr
Skippr 是一个超级简单的 jQuery 幻灯片插件.只是包括你的网页中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了.Skippr 能够自适应窗口 ...
- ajax从新浪获取实时股票数据
最近在给公司做一个报表展示,然后领导要求上面加上一些股票的实时数据展示. 一开始同事给我一个聚合数据的网址,说从这上面可以获取到.我一看,哟呵,API接口什么的都提供好了,确实方便.然后想用的时候才发 ...
- Lambda表达式和Lambda表达式树
LINQ的基本功能就是创建操作管道,以及这些操作需要的任何状态. 为了富有效率的使用数据库和其他查询引擎,我们需要一种不同的方式表示管道中的各个操作.即把代码当作可在编程中进行检查的数据. Lambd ...
- 图零直播新闻发布会—TOLINK2.0全面上线
在网络直播时代和现代信息技术条件下,教务管理正在由传统管理方式向数字化管理模式转变.教务管理创新需要现代信息技术来实现,使得教务管理的质量和效率得到了质的飞跃.图零直播,中国IT在线直播教育引领者,在 ...
- 【算法系列学习】DP和滚动数组 [kuangbin带你飞]专题十二 基础DP1 A - Max Sum Plus Plus
A - Max Sum Plus Plus https://vjudge.net/contest/68966#problem/A http://www.cnblogs.com/kuangbin/arc ...
- grunt轻松入门
项目目录,js源文件 gruntest Gruntfile.js package.json -- js ext community_plugin.js glogin_frm_cover.js iLog ...
- 结构体的vector resize()与初始化
序: 我们在使用vector的时候可以自定义里面的数据类型.例如这样: struct Edge{ int from; int to; int weight; }; vector<Edge> ...
- php 中时间函数date及常用的时间计算
曾在项目中需要使用到今天,昨天,本周,本月,本季度,今年,上周上月,上季度等等时间戳,趁最近时间比较充足,因此计划对php的相关时间知识点进行总结学习 1,阅读php手册date函数 常用时间函数: ...