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 ...
随机推荐
- UIKit的手风琴菜单,单条展开和多条同时展开
这个也要进来看看哈. 记得加多个属性时的用法就可以了. 因为官网提供太多的SAPMLE啦.. http://www.getuikit.net/docs/accordion.html <div c ...
- [cocos2d] 调用动画方法
利用texture atlases生成动画 中讲到如何添加动画,如果想要调用已添加的动画怎么办? 在1.0.1版本以前的cocos2d添加动画的方法为: CCAnimation *anim = [CC ...
- perl 获取虚拟机信息
[root@master ~]# cat simple_flow.pl ! /usr/bin/perl -w use strict; use warnings; 导入 vSphere SDK for ...
- Host group 信息
- 建立HttpsConnection
1建立HttpConnection,这种连接比较简单,但是是不安全的,网上例子比较多,现在主要说说如果建立HttpsConnection,这种连接时通过SSL协议加密,相对更安全,一般使用这种连接传输 ...
- Quality in the Test Automation Review Process and Design Review Template
About this document Prerequisite knowledge/experience: Software Testing, Test Automation Applicable ...
- unity3d Hair real time rendering 真实头发实时渲染
先放上效果 惊现塞拉酱 算法是Weta Digital根据siggraph2003的论文加以改进,改进之前使用的是Kajiya and Kay’s 模型,它能量不守恒,也就是说不是基于物理的,不准确 ...
- Jdk5.0新特性
增强for循环:foreach语句,foreach简化了迭代器. 格式:// 增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器 for( 元素类型 变量名 : Colle ...
- hdoj 2196 Computer【树的直径求所有的以任意节点为起点的一个最长路径】
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- postgresql数据库的数据导出
一.pg_dump的用法:数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump ...