Lambda表达式转SQL语句类库

/* 作者:道法自然  
 * 个人邮件:[email protected]
 * 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));

时间: 2024-10-10 12:39:05

Lambda表达式转SQL语句类库的相关文章

lambda表达式转换sql

这是我在博客园的第一遍文章,想分享下lambda表达式转换sql. 喜欢EF的便捷与优雅,不喜欢生成的一坨sql.(PS:公司封装了一套访问数据库的方法,所以不确定是不是EF的问题,反正就是一坨密密麻麻的的sql,我有点点处女座小纠结,虽然我是天蝎座) 好了,废话少说. using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Linq.Expr

Lambda表达式转换为sql

/// <summary> /// 表达式转sql帮助类 /// </summary> public static class LambdaToSqlHelper { /// <summary> /// 从表达式获取sql /// </summary> /// <typeparam name="T"></typeparam> /// <param name="func"></p

EF的连表查询Lambda表达式和linq语句(转)

var lst = from c in db.Blogs join p in db.Posts on c.Id equals p.BlogId where p.Id==1 select c; var lst1 = db.Blogs.Join(db.Posts.Where(p=>p.Id==1), b=> b.Id, p=> p.BlogId, (b, p) => new {b}); public class Blog { public int Id { get; set; } pu

Lambda表达式和查询表达式(1)基本概念

Lambda表达式也是一种匿名函数(anonymous function),比匿名方法具有更加简洁的表示形式.它可以包含表达式和语句,并且适用于创建委托和事件. 查询表达式: 是一种使用查询语法表示的表达式,它可以从一个或多个给定的数据源中检索数据,并制定检索结果的表现形式. Lambda表达式:  由输入参数.Lambda运算符和表达式(或语句块)构成. 它的语法形式如下: (input parameters) => empression; : input parameters : 表示输入参

04.C#委托、Lambda表达式

1.委托 (1)委托的本质 委托实际上就是指向函数的指针.在C#中委托是一种类型,定义一个委托就是定义一个新的类,它与类的地位是一样的,所以可以定义类的地方都可以定义委托! 实际上,使用delegate关键字定义的委托继承了System.MulticastDelegate类,而System.MulticastDelegate类又继承了System.Delegate. Delegate:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法. MulticastDelegate:

C#中Lambda表达式总结

在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>.例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode='1001')语句来直接完成,无需再写繁琐的foreach语句或者for循环.Lambda表达式的运算符即为=>. 一.Lambda表达式定义 Lambda表达式实际上是一

C# -- lambda表达式转为where条件sql语句的方法

我们在开发时,一般都会编写自已的数据库帮助类,如:DbHelper.DbHelper类中可能都有类拟有:一个根据条件查询得到一个实体集的方法: /// <summary> /// 根据条件语句 ,查实体列表集 /// 调用:如Users实体:字段:ID.Name /// List<Users> list = GetListByWhereString <Users>(" Id >0 and Name like 'FengCodes%' "); /

Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项

貌似已经半年多没写一篇帖子了,充分的说明要么老总一天折腾的让人心齐疲惫,没心情去写:要么另外一种可能就是自己不思进取,说白了就是懒.好在这种状态在今天被打破了.MoNey加油. 众所周知,想在EntityFrame实体框架中使用类似于SQL语句中like的效果时就的使用Contains方法了. 可是关于Contains方法使用过程中会出现的细节问题,并没有专门的文章来指出来. 小弟才疏学浅,一直只做些b/s开发,因此对于SQL的高级应用不需要接触,长期使用Lambda 表达式的过程中,已经彻底忘

SQL、LINQ和Lambda表达式

首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询这三者的不同实现. 简单介绍 LINQ(Language Integrate Query)是语言集成查询他在对象和数据之间建立一种对应的关系,可以使用访问内存对象的方式查询数据集合.LINQ查询是C#中的一种语言构造.因此开发人员可以再C#代码汇总嵌套类似于SQL语句的查询表达式,从而实现数据查询的