public static class PredicateBuilder { public static Expression<Func<T, bool>> True<T>() { return f => true; } public static Expression<Func<T, bool>> False<T>() { return f => false; } public static Expression<…
上一扁使用动态lambda表达式来将DataTable转换成实体,比直接用反射快了不少.主要是首行转换的时候动态生成了委托. 后面的转换都是直接调用委托,省去了多次用反射带来的性能损失. 今天在对SqlServer返回的流对象 SqlDataReader 进行处理,也采用动态生成Lambda表达式的方式转换实体. 先上一版代码 using System; using System.Collections.Generic; using System.Data; using System.Data.…
SqlDataReader生成动态Lambda表达式 上一扁使用动态lambda表达式来将DataTable转换成实体,比直接用反射快了不少.主要是首行转换的时候动态生成了委托. 后面的转换都是直接调用委托,省去了多次用反射带来的性能损失. 今天在对SqlServer返回的流对象 SqlDataReader 进行处理,也采用动态生成Lambda表达式的方式转换实体. 先上一版代码 1 using System; 2 using System.Collections.Generic; 3 usin…
传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如: using(var db=new MyDbContext()) { var s= db.Students.ToList().First(s=>s.ID=1200); } 嘣!进行了全表数据读取!当然一般人也不会犯这种低级的错误,言归正传. 可以简单的这样筛选数据: using(var db=new MyDbContext())…
做CURD开发的过程中,通常都会需要GetList,然而查询条件是一个可能变化的需求,如何从容对应需求变化呢? 首先,我们来设计一个套路,尝试以最小的工作量完成一次查询条件的需求变更 1.UI收集查询数据 2.UI将查询数据传递给Service 3.Service从查询配置(数据库.JSON.XML)中匹配出查询条件,并赋予UI取得的值 4.Service根据查询配置(已赋值)构建查询表达式. 5.执行查询返回数据. 大概流程如下图所示: 下面上代码,希望有人能看懂 >< 查询保存设置 pub…
EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句 分类: C# Lambda/Linq Entity Framework 2013-05-24 06:58 491人阅读 评论(0) 收藏 举报 Entity Framework动态Lambda条件Linq拼接Lambda拼接代替sql拼接 传统的操作数据库方式,筛选数据需要用StringBuilder拼接一大堆的WHERE子句. 在Entity Framework中,代码稍有不慎就会造成巨大性能消耗,如…
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using NUnit.Framework; namespace ConsoleApplication1 { /// <summary> /// 动态Linq /// </summary> [TestFixture] public clas…
委托与Lambda表达式   1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树   一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来提供相同的功能, 它将方法作为对象封装起来,允许在"运行时"间接地绑定一个方法调用. 声明的委托相当于一种自定义的数据类型. 1.背景 冒泡排序 static class SimpleSort1 { public static void BubbleSort(int[] items) {…
12.1.委托概述 12.1.2 委托的数据类型 为了减少重复代码数量,可以将比较方法作为参数传递给 BubbleSort()方法.此外,为了将方法作为参数传递,必须有一个能够标识方法的数据类型--也就是委托.这里的委托类型是 ComparisonHandler .  c# 2.0之前的写法 class DelegateSample { static void Main(string[] args) { //int[] arr = { 10, 20, 30, 40, 50 }; int[] ar…
最近在用C#与数据库打交道.开发过程中采用了ORM模型(以前是纯sql玩法,复杂的逻辑用存储过程做). 为了能通过配置文件动态地查询字段,也就是说需要能这样写: db.AsQuery<T>.Select("字段")//伪代码 通过多方查找终于找到了方案,那就是用动态Lambda表达式树(.net3.5以后的版本支持). 后来看别人写的ORM代码中,将C#代码转为SQL语句时出采用了表达式树,所以马上提起了学习兴趣. 先写着写一个hello world ,就是动态地拼出一个…