bool CompareExpressions(SelectQuery.Predicate.ExprExpr expr1, SelectQuery.Predicate.ExprExpr expr2) { if (expr1.Operator != expr2.Operator) { return(false); } if (expr1.ElementType != expr2.ElementType) { return(false); } switch (expr1.ElementType) { case QueryElementType.ExprExprPredicate: { return(CompareExpressions(expr1.Expr1, expr2.Expr1) == true && CompareExpressions(expr1.Expr2, expr2.Expr2) == true || CompareExpressions(expr1.Expr1, expr2.Expr2) == true && CompareExpressions(expr1.Expr2, expr2.Expr1) == true); } } return(false); }
protected override void BuildPredicate(ISqlPredicate predicate) { var newpredicate = predicate; if (predicate is SelectQuery.Predicate.Like) { var p = (SelectQuery.Predicate.Like)predicate; var param2 = GetParm(p.Expr2 as IValueContainer, p.Expr1.SystemType); if (param2 != null) { if (param2 is SqlValue && ((SqlValue)param2).Value == null) { if (p.IsNot) { newpredicate = new SelectQuery.Predicate.ExprExpr(p.Expr1, SelectQuery.Predicate.Operator.NotEqual, p.Expr2); } else { newpredicate = new SelectQuery.Predicate.ExprExpr(p.Expr1, SelectQuery.Predicate.Operator.Equal, p.Expr2); } } else { newpredicate = new SelectQuery.Predicate.Like(p.Expr1, p.IsNot, param2, p.Escape); } } } if (predicate is SelectQuery.Predicate.ExprExpr) { var p = (SelectQuery.Predicate.ExprExpr)predicate; if (p.Expr1 is SqlFunction && ((SqlFunction)p.Expr1).Name == "Date") { if (p.Expr2 != null && p.Expr2 is SqlParameter) { var p2 = ((SqlParameter)p.Expr2); p2.DataType = DataType.Date; } } } base.BuildPredicate(newpredicate); }
static void BuildJoin( ExpressionBuilder builder, SelectQuery.FromClause.Join join, IBuildContext outerKeyContext, Expression outerKeySelector, IBuildContext innerKeyContext, Expression innerKeySelector, IBuildContext countKeyContext, SelectQuery countSelect) { var predicate = builder.ConvertObjectComparison( ExpressionType.Equal, outerKeyContext, outerKeySelector, innerKeyContext, innerKeySelector); if (predicate == null) { predicate = new SelectQuery.Predicate.ExprExpr( builder.ConvertToSql(outerKeyContext, outerKeySelector), SelectQuery.Predicate.Operator.Equal, builder.ConvertToSql(innerKeyContext, innerKeySelector)); predicate = builder.Convert(outerKeyContext, predicate); } join.JoinedTable.Condition.Conditions.Add(new SelectQuery.Condition(false, predicate)); predicate = builder.ConvertObjectComparison( ExpressionType.Equal, outerKeyContext, outerKeySelector, countKeyContext, innerKeySelector); if (predicate == null) { predicate = new SelectQuery.Predicate.ExprExpr( builder.ConvertToSql(outerKeyContext, outerKeySelector), SelectQuery.Predicate.Operator.Equal, builder.ConvertToSql(countKeyContext, innerKeySelector)); predicate = builder.Convert(outerKeyContext, predicate); } countSelect.Where.SearchCondition.Conditions.Add(new SelectQuery.Condition(false, predicate)); }
static void BuildSubQueryJoin( ExpressionBuilder builder, IBuildContext outerKeyContext, Expression outerKeySelector, Expression innerKeySelector, IBuildContext subQueryKeyContext, SelectQuery subQuerySelect) { var predicate = builder.ConvertObjectComparison( ExpressionType.Equal, outerKeyContext, outerKeySelector, subQueryKeyContext, innerKeySelector); if (predicate == null) { predicate = new SelectQuery.Predicate.ExprExpr( builder.ConvertToSql(outerKeyContext, outerKeySelector), SelectQuery.Predicate.Operator.Equal, builder.ConvertToSql(subQueryKeyContext, innerKeySelector)); predicate = builder.Convert(outerKeyContext, predicate); } subQuerySelect.Where.SearchCondition.Conditions.Add(new SelectQuery.Condition(false, predicate)); }