Linq语句 动态组建

 1        public override System.Linq.Expressions.Expression<Func<I_Position_Access, bool>> GetWhereLambda(I_Position_Access t)
 2         {
 3             ParameterExpression parameter = Expression.Parameter(typeof(I_Position_Access), "b");//创建参数b
 4             System.Linq.Expressions.ConstantExpression constant = Expression.Constant(t.I_Position_AccessID);//创建常数 
 5             MemberExpression member = Expression.PropertyOrField(parameter, "I_Position_AccessID");
 6 
 7             System.Linq.Expressions.BinaryExpression bin =
 8                 Expression.GreaterThan(member, constant);//创建 i > 常数 
 9 
10             if (t.I_Position_AccessID > 0)
11             {
12                 constant = Expression.Constant(t.I_Position_AccessID);
13                 member = Expression.PropertyOrField(parameter, "I_Position_AccessID");
14                 bin = Expression.Equal(member, constant);
15             }
16             if (t.I_PositionID > 0)
17             {
18                 constant = Expression.Constant(Convert.ToInt32(t.I_PositionID), typeof(int?));
19                 member = Expression.PropertyOrField(parameter, "I_PositionID");
20                 System.Linq.Expressions.BinaryExpression where2 = Expression.Equal(member, constant);
21 
22                 bin = Expression.And(bin, where2);
23             }
24             if (t.I_AccessID > 0)
25             {
26                 constant = Expression.Constant(Convert.ToInt32(t.I_AccessID), typeof(int?));
27                 member = Expression.PropertyOrField(parameter, "I_AccessID");
28                 System.Linq.Expressions.BinaryExpression whereI_AccessID = Expression.Equal(member, constant);
29                 bin = Expression.And(bin, whereI_AccessID);
30             }
31             if (t.OpenState > 0)
32             {
33                 constant = Expression.Constant(Convert.ToInt32(t.OpenState), typeof(int?));
34                 member = Expression.PropertyOrField(parameter, "OpenState");
35                 System.Linq.Expressions.BinaryExpression whereOpenState = Expression.Equal(member, constant);
36                 bin = Expression.And(bin, whereOpenState);
37             }
38             return Expression.Lambda<Func<I_Position_Access, bool>>(bin, parameter);
39             //获取Lambda表达式
40         }
原文地址:https://www.cnblogs.com/demoC/p/5107520.html