| | |
| | | return propertyName.CreateExpression<T>(propertyValue, null, expressionType); |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |