Lambda表达式转SQL语句类库
/* 作者:道法自然
* 个人邮件:myyangbin@sina.cn
* 2014-10-1
*/
Lambda表达式转SQL语句类库
源码下载:http://download.csdn.net/detail/xftyyyyb/8044085
一、可以达到的功能
本功能类库主要提供给代码中使用Lambda表达式,后需转成SQL的条件语句这一需求。
二、不能做的
1、本类库不能解析Linq语句;
2、不能解析SQL中的Select部分;
三、案例:
1、以Northwind数据库Customers表为例,为使问题简单,仅用部分字段演示
/// <summary>
/// 客户管理
/// </summary>
public class Customers
{
/// <summary>
/// 客户ID
/// </summary>
public string CustomerID { get; set; }
/// <summary>
/// 公司名称
/// </summary>
public string CompanyName { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
}
2、可能会有如下方法访问数据库
public static Customers Data_Fetch(string aiWhere, string aiOrderBy)
{
var cnstr = ConfigurationManager.ConnectionStrings["DemoConnectionString"].ConnectionString;
Customers aiCustomers = new Customers();
StringBuilder aisd = new StringBuilder();
using (SqlConnection cn = new SqlConnection(cnstr))
{
#region 数据访问
#region 查询SQL语句
aisd.Append(" SELECT ");
aisd.Append(" CustomerID,CompanyName,Address ");
aisd.Append(" FROM Customers ");
aisd.Append(aiWhere);
aisd.Append(aiOrderBy);
#endregion
cn.Open();
using (SqlCommand cmd = new SqlCommand(aisd.ToString(), cn))
{
using (SqlDataReader myDataReader = cmd.ExecuteReader())
{
if (myDataReader.HasRows)
{
myDataReader.Read();
aiCustomers = new Customers
{
#region 类赋值
CustomerID = (string)myDataReader["CustomerID"],
CompanyName = (string)myDataReader["CompanyName"],
Address = (string)myDataReader["Address"]
#endregion
};
}
};
}
#endregion
}
return aiCustomers;
}
3、构建一个表达式方法
public static class DbCustomersTest
{
/// <summary>
/// 构建一个表达式方法
/// </summary>
/// <param name="aiExp">表达式</param>
/// <returns></returns>
public static Customers GetCustomers(Expression<Func<IQueryable<Customers>, IQueryable<Customers>>> aiExp)
{
AiExpConditions<Customers> expc = new AiExpConditions<Customers>();
expc.Add(aiExp);
return Customers.Data_Fetch(expc.Where(), expc.OrderBy());
}
}
4、调用用例测试
Customers aic = DbCustomersTest.GetCustomers(c => c.Where(o => o.CustomerID == "ALFKI"));
Customers aic2 = DbCustomersTest.GetCustomers(c => c.Where(o => o.CustomerID.Contains("CO")).OrderBy(o=>o.CompanyName));
Lambda表达式转SQL语句类库的更多相关文章
- lambda表达式转换sql
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...
- where条件的lambda转化为sql语句
网上找的源码,但是博主说有bug 让自己调试.这个是我经过多次修改后的代码,可以直接用 public static class LambdaToSqlHelper { #region 基础方法 #re ...
- EF的连表查询Lambda表达式和linq语句
select c; ), b=> b.Id, p=> p.BlogId, (b, p) => new {b}); public class Blog { public int Id ...
- SqlHelper简单实现(通过Expression和反射)5.Lambda表达式解析类
这个ExpressionHelper类,是整个SqlHelper中,最核心的一个类,主要功能就是将Lambda表达式转换为Sql语句.同时这个转换过程比较复杂,所以下面详细讲解一下思路和这个类的作用. ...
- 匿名方法与Lambda表达式
1.匿名方法 在学习委托时,我们知道委托实例至少要绑定一个方法才能使用,而调用委托实际上是调用了它所关联地方法.一般来说,需要定义一个与委托签名相符的方法,并使之与委托变量关联.如以下代码: Acti ...
- lambda函数、lambda表达式
C++11 新特性:Lambda 表达式 豆子 2012年5月15日 C++ 10条评论 参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbi ...
- Visual Studio 调试技巧 -- 为 Lambda 表达式设置中断
如果我说 .NET 世界上最厉害的开发平台(语言),资深的同仁肯定不会往下看了,因为这将是一个无休止的争论,到头来搞不好还是人身攻击.然而,如果我说 Visual Studio 是世界上最友好最强大的 ...
- 委托、Lambda表达式
本文来自:http://wenku.baidu.com/link?url=o9Xacr4tYocCPhivayRQXfIc9kOZeWBwPn2FZfeF19P4-8YX5CMXs74WB-Y8t0S ...
- Linq学习系列-----1.1 Lambda表达式介绍
1.1 Lambda表达式介绍 下图就是一个典型的Lambda表达式. instance:输入参数 =>:Lambda操作符 instance.MemoryCount>=20*1024 ...
随机推荐
- 【HTTP】Speed and Mobility: An Approach for HTTP 2.0 to Make Mobile Apps and the Web Faster
This week begins face to face meetings at the IETF on how to approach HTTP 2.0 and improve the Inter ...
- Linux怪哉ntfs
http://www.linuxidc.com/Linux/2013-08/88721.htm
- I2C总线之(三)---以C语言理解IIC
为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形: 如下图所示的写操作的时序图: 读时序的理解同理.对于时序不理解的朋友请参考“I2C总线之(二)---时序” 完整的程序如下: ...
- 在 ActionBar 添加刷新按钮
在以前版本的 Gmail 应用中,ActionBar 上有个刷新菜单,点击一下刷新菜单变成一个转圈的刷新标示动画图片. 之前实现该功能的时候都是使用一个类库 RefreshActionItem来实现的 ...
- js中的变量提升
var v='Hello World'; (function(){ alert(v); var v='I love you'; })() 会出现alert出来的是undefined,原因是因为在函数域 ...
- BLE开发的各种坑
这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈).总体感觉 Android BLE 还是不太稳定,开发起来也是各种痛苦.这里记录一些杂项和开发中遇到的问题及其解决方法,避免大家踩坑.本 ...
- java多线程 ReentrantLock
本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...
- 【HDOJ】3029 Scales
CF上有道类似的,做了那个这个简单多了.思路是取模.模等于1如何处理,模等于2如何分类分类讨论后.可解.解得对数据排序后再输出. /* 3029 */ #include <iostream> ...
- 使用bacula实现Linux的远程备份和还原
Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作.Bacula,既有windows版本的,也有Linux,U ...
- 2015第45周五IE11实用开发工具摘录及设置IE缓存
UI响应工具的作用 UI响应工具顾名思义就是查看UI响应时间的工具,通过这个工具可以帮助我们确定应用中的哪些组件占用了多少CPU时间,让我们之后可以更有针对性的进行优化,从而最大限度地改善应用性能,同 ...