public static SqlScalarExpression Visit(MethodCallExpression methodCallExpression, TranslationContext context) { BuiltinFunctionVisitor visitor = null; if (SpatialBuiltinFunctionDefinitions.TryGetValue(methodCallExpression.Method.Name, out visitor)) { return(visitor.Visit(methodCallExpression, context)); } throw new DocumentQueryException(string.Format(CultureInfo.CurrentCulture, ClientResources.MethodNotSupported, methodCallExpression.Method.Name)); }
protected override SqlScalarExpression VisitImplicit(MethodCallExpression methodCallExpression, TranslationContext context) { if (methodCallExpression.Arguments.Count == 2) { SqlScalarExpression haystack = ExpressionToSql.VisitScalarExpression(methodCallExpression.Arguments[0], context); SqlScalarExpression needle = ExpressionToSql.VisitScalarExpression(methodCallExpression.Arguments[1], context); return(SqlFunctionCallScalarExpression.CreateBuiltin("CONTAINS", haystack, needle)); } return(null); }
protected override SqlScalarExpression VisitImplicit(MethodCallExpression methodCallExpression, TranslationContext context) { if (methodCallExpression.Arguments.Count == 1) { SqlScalarExpression str = ExpressionToSql.VisitScalarExpression(methodCallExpression.Arguments[0], context); return(SqlFunctionCallScalarExpression.CreateBuiltin("LENGTH", str)); } return(null); }
protected override SqlScalarExpression VisitImplicit(MethodCallExpression methodCallExpression, TranslationContext context) { if (methodCallExpression.Arguments.Count == 1 && methodCallExpression.Arguments[0] is NewArrayExpression) { ReadOnlyCollection <Expression> argumentsExpressions = ((NewArrayExpression)methodCallExpression.Arguments[0]).Expressions; List <SqlScalarExpression> arguments = new List <SqlScalarExpression>(); foreach (Expression argument in argumentsExpressions) { arguments.Add(ExpressionToSql.VisitScalarExpression(argument, context)); } return(SqlFunctionCallScalarExpression.CreateBuiltin("CONCAT", arguments)); } return(null); }
protected override SqlScalarExpression VisitExplicit(MethodCallExpression methodCallExpression, TranslationContext context) { return(null); }
protected override SqlScalarExpression VisitImplicit(MethodCallExpression methodCallExpression, TranslationContext context) { if (methodCallExpression.Arguments.Count == 1) { SqlScalarExpression left = ExpressionToSql.VisitScalarExpression(methodCallExpression.Object, context); SqlScalarExpression right = ExpressionToSql.VisitScalarExpression(methodCallExpression.Arguments[0], context); return(SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Equal, left, right)); } return(null); }
protected override SqlScalarExpression VisitImplicit(MethodCallExpression methodCallExpression, TranslationContext context) { if (methodCallExpression.Arguments.Count == 1) { SqlScalarExpression memberExpression = ExpressionToSql.VisitScalarExpression(methodCallExpression.Object, context); SqlScalarExpression indexExpression = ExpressionToSql.VisitScalarExpression(methodCallExpression.Arguments[0], context); SqlScalarExpression[] arguments = new SqlScalarExpression[] { memberExpression, indexExpression, ExpressionToSql.VisitScalarExpression(Expression.Constant(1), context) }; return(SqlFunctionCallScalarExpression.CreateBuiltin("SUBSTRING", arguments)); } return(null); }
protected override SqlScalarExpression VisitImplicit(MethodCallExpression methodCallExpression, TranslationContext context) { if (methodCallExpression.Arguments.Count == 1 && methodCallExpression.Arguments[0].NodeType == ExpressionType.Constant && methodCallExpression.Arguments[0].Type == typeof(char[])) { char[] argumentsExpressions = (char[])((ConstantExpression)methodCallExpression.Arguments[0]).Value; if (argumentsExpressions.Length == 0) { SqlScalarExpression str = ExpressionToSql.VisitScalarExpression(methodCallExpression.Object, context); return(SqlFunctionCallScalarExpression.CreateBuiltin("RTRIM", str)); } } return(null); }