protected HqlTreeNode VisitUnaryExpression(UnaryExpression expression) { switch (expression.NodeType) { case ExpressionType.Negate: return(_hqlTreeBuilder.Negate(VisitExpression(expression.Operand).AsExpression())); case ExpressionType.UnaryPlus: return(VisitExpression(expression.Operand).AsExpression()); case ExpressionType.Not: return(_hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).ToBooleanExpression())); case ExpressionType.Convert: case ExpressionType.ConvertChecked: case ExpressionType.TypeAs: if ((expression.Operand.Type.IsPrimitive || expression.Operand.Type == typeof(Decimal)) && (expression.Type.IsPrimitive || expression.Type == typeof(Decimal))) { return(_hqlTreeBuilder.Cast(VisitExpression(expression.Operand).AsExpression(), expression.Type)); } return(VisitExpression(expression.Operand)); } throw new NotSupportedException(expression.ToString()); }
protected HqlTreeNode VisitUnaryExpression(UnaryExpression expression) { switch (expression.NodeType) { case ExpressionType.Negate: return(_hqlTreeBuilder.Negate(VisitExpression(expression.Operand).AsExpression())); case ExpressionType.UnaryPlus: return(VisitExpression(expression.Operand).AsExpression()); case ExpressionType.Not: return(_hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).ToBooleanExpression())); case ExpressionType.Convert: case ExpressionType.ConvertChecked: case ExpressionType.TypeAs: return(IsCastRequired(expression.Operand, expression.Type, out var existType) ? _hqlTreeBuilder.Cast(VisitExpression(expression.Operand).AsExpression(), expression.Type) // Make a transparent cast when an IType exists, so that it can be used to retrieve the value from the data reader : existType && HqlIdent.SupportsType(expression.Type) ? _hqlTreeBuilder.TransparentCast(VisitExpression(expression.Operand).AsExpression(), expression.Type) : VisitExpression(expression.Operand)); } throw new NotSupportedException(expression.ToString()); }
protected HqlTreeNode VisitUnaryExpression(UnaryExpression expression) { switch (expression.NodeType) { case ExpressionType.Negate: return(_hqlTreeBuilder.Negate(VisitExpression(expression.Operand).AsExpression())); case ExpressionType.UnaryPlus: return(VisitExpression(expression.Operand).AsExpression()); case ExpressionType.Not: return(_hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).ToBooleanExpression())); case ExpressionType.Convert: case ExpressionType.ConvertChecked: case ExpressionType.TypeAs: var castable = !_notCastableExpressions.TryGetValue(expression, out var castType); if (castable) { castType = expression.Type; } return(IsCastRequired(expression.Operand, castType, out var needTransparentCast) && castable ? _hqlTreeBuilder.Cast(VisitExpression(expression.Operand).AsExpression(), castType) // Make a transparent cast when an IType exists, so that it can be used to retrieve the value from the data reader : needTransparentCast ? _hqlTreeBuilder.TransparentCast(VisitExpression(expression.Operand).AsExpression(), castType) : VisitExpression(expression.Operand)); } throw new NotSupportedException(expression.ToString()); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection <Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { // All has two arguments. Arg 1 is the source and arg 2 is the predicate var predicate = (LambdaExpression)arguments[1]; return(treeBuilder.BooleanNot( treeBuilder.Exists( treeBuilder.Query( treeBuilder.SelectFrom( treeBuilder.From( treeBuilder.Range( visitor.Visit(arguments[0]), treeBuilder.Alias(predicate.Parameters[0].Name)) ) ), treeBuilder.Where( treeBuilder.BooleanNot(visitor.Visit(arguments[1]).ToBooleanExpression()) ) ) ) )); }
protected HqlTreeNode VisitUnaryExpression(UnaryExpression expression) { switch (expression.NodeType) { case ExpressionType.Not: return(_hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).AsBooleanExpression())); case ExpressionType.Convert: return(VisitExpression(expression.Operand)); } throw new NotSupportedException(expression.ToString()); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection <Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { HqlExpression value = visitor.Visit(arguments[0]).AsExpression(); HqlTreeNode inClauseNode = BuildInClause(arguments, treeBuilder, visitor); HqlTreeNode inClause = treeBuilder.In(value, inClauseNode); if (method.Name == "NotIn") { inClause = treeBuilder.BooleanNot((HqlBooleanExpression)inClause); } return(inClause); }
protected HqlTreeNode VisitUnaryExpression(UnaryExpression expression) { switch (expression.NodeType) { case ExpressionType.Not: return(_hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).AsBooleanExpression())); case ExpressionType.Convert: case ExpressionType.ConvertChecked: { if (expression.Operand.Type.IsPrimitive && expression.Type.IsPrimitive) { return(_hqlTreeBuilder.Cast(VisitExpression(expression.Operand).AsExpression(), expression.Type)); } return(VisitExpression(expression.Operand)); } } throw new NotSupportedException(expression.ToString()); }
public override HqlTreeNode BuildHql(MethodInfo method, System.Linq.Expressions.Expression targetObject, ReadOnlyCollection <System.Linq.Expressions.Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var value = visitor.Visit(arguments[0]).AsExpression(); HqlTreeNode inClauseNode; if (arguments[1] is ConstantExpression) { inClauseNode = BuildFromArray((Array)((ConstantExpression)arguments[1]).Value, treeBuilder); } else { inClauseNode = BuildFromExpression(arguments[1], visitor); } HqlTreeNode inClause = treeBuilder.In(value, inClauseNode); if (method.Name == "NotIn") { inClause = treeBuilder.BooleanNot((HqlBooleanExpression)inClause); } return(inClause); }