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 }
原文:http://www.cnblogs.com/demoC/p/5107520.html