private Expression <Func <TEntity, bool> > DateTimeExpr(DateTimeFromToFilterComplex dateTimeFromToFilter, ParameterExpression item) { Expression <Func <TEntity, bool> > lambdaExpr; if (EntityPropertyType.IsNullable()) { var(fromDateExpressionInfo, toDateExpressionInfo) = BuildExpressionDateTimeInfo(dateTimeFromToFilter, true); MemberExpression memberExpression = dateTimeFromToFilter.TruncateTime ? Expression.Property(Expression.Property(PropertyOrField, "Value"), "Date") : PropertyOrField; var ifTrue = memberExpression .GreaterLessThanBuilderExpressions(fromDateExpressionInfo, toDateExpressionInfo, BitwiseOperationExpressions.AndAlso); var nullOrGreaterLess = Expression.AndAlso( Expression.Property(PropertyOrField, "HasValue"), ifTrue); lambdaExpr = nullOrGreaterLess.LambdaExpressionBuilder <TEntity>(item); } else { var(dateFromExprInfo, dateToExprInfo) = BuildExpressionDateTimeInfo(dateTimeFromToFilter, false); var entityPropTruncated = dateTimeFromToFilter.TruncateTime ? Expression.Property(PropertyOrField, "Date") : PropertyOrField; var dateTimeExpr = entityPropTruncated.GreaterLessThanBuilderExpressions(dateFromExprInfo, dateToExprInfo, BitwiseOperationExpressions.AndAlso); lambdaExpr = dateTimeExpr.LambdaExpressionBuilder <TEntity>(item); } return(lambdaExpr); }
private Expression <Func <TEntity, bool> > DefaultExpr() { var right = Expression.Constant(FilterPropertyValue); BinaryExpression binaryExpression; if (EntityPropertyType.IsNullable()) { var leftUnaryExpression = Expression.Convert(PropertyOrField, FilterPropertyValue.GetType()); binaryExpression = Expression.Equal(leftUnaryExpression, right); } else { binaryExpression = Expression.Equal(PropertyOrField, right); } var lambda = binaryExpression.LambdaExpressionBuilder <TEntity>(Item); return(lambda); }
private Expression <Func <TEntity, bool> > DateTimeExpr(DateTimeFromToFilter dateTimeFromToFilter, ParameterExpression item) { var dateTimeValueDateFrom = dateTimeFromToFilter.DateFrom; // (DateTimeValue) propertiesDateTime[0].GetValue(propertyValue); var dateTimeValueDateTo = dateTimeFromToFilter.DateTo; // var bitwiseOperation = dateTimeFromToFilter.BitwiseOperation; var fromDate = dateTimeValueDateFrom.DateTime; DateTime?toDate = default; (ConstantExpression rightToDate, CompareExpressionType? ExpressionType)dateToInfoTuple = default; CompareExpressionType dateToExprType = default; if (dateTimeValueDateTo != null) { dateToExprType = dateTimeValueDateTo.ExpressionType ?? CompareExpressionType.LessThanOrEqual; toDate = dateTimeValueDateTo.DateTime; if (toDate.HasValue) { var rightToDate = Expression.Constant(toDate.Value.Date); dateToInfoTuple = (rightToDate, dateToExprType); } } var rightFromDate = Expression.Constant(fromDate.Value.Date); var dateFromExprType = dateTimeValueDateFrom.ExpressionType ?? CompareExpressionType.GreaterThanOrEqual; var dateFromInfoTuple = (rightFromDate, compareExpressionType: dateFromExprType); Expression <Func <TEntity, bool> > lambdaExpr; if (EntityPropertyType.IsNullable()) { var ifTrue = Expression.Property(Expression.Property(PropertyOrField, "Value"), "Date") .GreaterLessThanBuilderExpressions(dateFromInfoTuple, dateToInfoTuple, BitwiseOperationExpressions.AndAlso); var ifFalse = PropertyOrField.GreaterLessThanBuilderExpressions( (Expression.Constant(fromDate, typeof(DateTime?)), dateFromExprType), toDate == null ? default : (Expression.Constant(toDate, typeof(DateTime?)), dateToExprType), BitwiseOperationExpressions.AndAlso); var conditionalExpression = Expression.Condition(Expression.Property(PropertyOrField, "HasValue"), ifTrue, ifFalse); lambdaExpr = conditionalExpression.LambdaExpressionBuilder <TEntity>(item); } else { var entityPropTruncated = Expression.Property(PropertyOrField, "Date"); var dateTimeExpr = entityPropTruncated.GreaterLessThanBuilderExpressions(dateFromInfoTuple, dateToInfoTuple, BitwiseOperationExpressions.AndAlso); lambdaExpr = dateTimeExpr.LambdaExpressionBuilder <TEntity>(item); } return(lambdaExpr); }