|  |  | 
 |  |  |  | 
 |  |  |             return p => false; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public static Expression<Func<TEntity, bool>> GetWhereExpression<TEntity>(this PropertyInfo propertyInfo, object propertyValue, ParameterExpression parameter, LinqExpressionType expressionType) | 
 |  |  |         { | 
 |  |  |             Type proType = propertyInfo.PropertyType; | 
 |  |  |             ConstantExpression constant = proType.ToString() == "System.String" | 
 |  |  |                ? Expression.Constant(propertyValue) : Expression.Constant(propertyValue.ToString().ChangeType(proType)); | 
 |  |  |  | 
 |  |  |             // DateTimeåªéæ©äºæ¥æçæ¶åèªå¨å¨ç»ææ¥æå ä¸å¤©ï¼ä¿®å¤DateTimeç±»åä½¿ç¨æ¥æåºé´æ¥è¯¢æ æ³æ¥è¯¢å°ç»ææ¥æçé®é¢ | 
 |  |  |             if ((proType == typeof(DateTime) || proType == typeof(DateTime?)) && expressionType == LinqExpressionType.LessThanOrEqual && propertyValue.ToString().Length == 10) | 
 |  |  |             { | 
 |  |  |                 constant = Expression.Constant(Convert.ToDateTime(propertyValue.ToString()).AddDays(1)); | 
 |  |  |             } | 
 |  |  |             parameter = parameter ?? Expression.Parameter(typeof(TEntity), "b"); | 
 |  |  |             //å建èç¹ç屿§p=>p.name å±æ§name | 
 |  |  |             MemberExpression memberProperty = Expression.PropertyOrField(parameter, propertyInfo.Name); | 
 |  |  |             UnaryExpression member = Expression.Convert(memberProperty, constant.Type); | 
 |  |  |             Expression<Func<TEntity, bool>> expression = p => false; | 
 |  |  |             switch (expressionType) | 
 |  |  |             { | 
 |  |  |                 //p=>p.propertyName == propertyValue | 
 |  |  |                 case LinqExpressionType.Equal: | 
 |  |  |                     expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Equal(member, constant), parameter); | 
 |  |  |                     break; | 
 |  |  |                 //p=>p.propertyName != propertyValue | 
 |  |  |                 case LinqExpressionType.NotEqual: | 
 |  |  |                     expression = Expression.Lambda<Func<TEntity, bool>>(Expression.NotEqual(member, constant), parameter); | 
 |  |  |                     break; | 
 |  |  |                 //   p => p.propertyName > propertyValue | 
 |  |  |                 case LinqExpressionType.GreaterThan: | 
 |  |  |                     expression = Expression.Lambda<Func<TEntity, bool>>(Expression.GreaterThan(member, constant), parameter); | 
 |  |  |                     break; | 
 |  |  |                 //   p => p.propertyName < propertyValue | 
 |  |  |                 case LinqExpressionType.LessThan: | 
 |  |  |                     expression = Expression.Lambda<Func<TEntity, bool>>(Expression.LessThan(member, constant), parameter); | 
 |  |  |                     break; | 
 |  |  |                 // p => p.propertyName >= propertyValue | 
 |  |  |                 case LinqExpressionType.ThanOrEqual: | 
 |  |  |                     expression = Expression.Lambda<Func<TEntity, bool>>(Expression.GreaterThanOrEqual(member, constant), parameter); | 
 |  |  |                     break; | 
 |  |  |                 // p => p.propertyName <= propertyValue | 
 |  |  |                 case LinqExpressionType.LessThanOrEqual: | 
 |  |  |                     expression = Expression.Lambda<Func<TEntity, bool>>(Expression.LessThanOrEqual(member, constant), parameter); | 
 |  |  |                     break; | 
 |  |  |                 //   p => p.propertyName.Contains(propertyValue) | 
 |  |  |                 // p => !p.propertyName.Contains(propertyValue) | 
 |  |  |                 case LinqExpressionType.Contains: | 
 |  |  |                 case LinqExpressionType.NotContains: | 
 |  |  |                     MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) }); | 
 |  |  |                     constant = Expression.Constant(propertyValue, typeof(string)); | 
 |  |  |                     if (expressionType == LinqExpressionType.Contains) | 
 |  |  |                     { | 
 |  |  |                         expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Call(member, method, constant), parameter); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         expression = Expression.Lambda<Func<TEntity, bool>>(Expression.Not(Expression.Call(member, method, constant)), parameter); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 default: | 
 |  |  |                     //  | 
 |  |  |                     expression = p => false; | 
 |  |  |                     break; | 
 |  |  |             } | 
 |  |  |             return expression; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |