需求简介
最近这几天做的东西总算是回归咱的老本行了,给投资管理项目做一个台账的东西,就是类似我们的报表。其
中有一个功能是一个高级查询的需求,在查询条件方面大概有7、8个查询条件。需求就是如果一个条件都不输入就默
认查询全部的数据,那个条件不为空的时候就在查询条件上面添加对响应字段的限制,也就是说我们在写查询条件的
时候不能写死,因为我们不知道我们到底有几个条件?到底有几个条件。所以需要我们动态的创建Lambd表达式。看
了看他们相似的功能,在实现的时候用的动态拼接SQL语句,那些SQL代码啊?看到都头疼,所以我直接放弃了,用咱
自己熟悉的知识来实现。和这个相似的功能自己在之前的《图书馆项目》中实现过,请点击我。
具体实现—小Demo
首先需要引入命名空间
using System.Linq.Expressions.Expression;
//创建一个数组用来当做例子
var ints = new int []{ 1, 2 , 3 , 4 , 5 , 6 };
// 要创建形如 i => i < 5
//创建参数 i
var parameter = Expression.Parameter(typeof(int),”i”);
//创建常数 5
var constant = Expression.Constant(5);
//创建 i > 5
var bin = Expression.GreaterThan(parameter,constant);
//获取Lambda表达式
var lambda=Expression.Lambda<Func<Int32,Boolean>>(bin,parameter);
//取得查询结果
var query = ints.Where(lambda.Compile());
BinaryExpression condition = null;
//要构造的表达式i==1||i==2||i==3.....
for (int i = 0; i < ints.Length; i++)
{
ConstantExpression ce = Expression.Constant(i);
if (condition == null)
{
condition = Expression.Equal(parameter, ce);
}
else
{
var right = Expression.Equal(parameter, ce);
condition = Expression.Or(condition, right);
}
}
Expression<Func<Int32, Boolean>> lambda =