/// <summary> /// Resolves types for the specified expression. /// </summary> /// <param name="expression">The expression to resolve types for.</param> /// <returns>Expression with resolved types.</returns> public QueryExpression Visit(LinqJoinExpression expression) { var outer = this.ResolveTypes(expression.Outer); var inner = this.ResolveTypes(expression.Inner); var outerType = ValidateSourceIsACollection(outer); var innerType = ValidateSourceIsACollection(inner); var outerKeySelector = this.ResolveLambdaTypes(expression.OuterKeySelector, outerType); var innerKeySelector = this.ResolveLambdaTypes(expression.InnerKeySelector, innerType); var resultSelector = this.ResolveLambdaTypes(expression.ResultSelector, outerType, innerType); return(LinqBuilder.Join(outer, inner, outerKeySelector, innerKeySelector, resultSelector, resultSelector.Body.ExpressionType.CreateCollectionType())); }
/// <summary> /// Visits a QueryExpression tree whose root node is the LinqJoinExpression. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Uri query string representing the expression.</returns> public virtual string Visit(LinqJoinExpression expression) { throw new TaupoNotSupportedException("Not supported"); }
/// <summary> /// Generates System.CodeDom.CodeExpression from the given expression. /// </summary> /// <param name="expression">Expression from which System.CodeDom.CodeExpression is generated.</param> /// <returns>Generated System.CodeDom.CodeExpression.</returns> public virtual CodeExpression Visit(LinqJoinExpression expression) { return(this.VisitJoinExpressionBase(expression, "Join")); }
/// <summary> /// Evaluates the specified expression. /// </summary> /// <param name="expression">The expression to evaluate.</param> /// <returns>Value of the expression.</returns> public QueryValue Visit(LinqJoinExpression expression) { return(this.EvaluateJoinExpression(expression, false)); }
/// <summary> /// Replaces the given expression. /// </summary> /// <param name="expression">The root node of the expression tree being visited.</param> /// <returns>Replaced expression.</returns> public virtual QueryExpression Visit(LinqJoinExpression expression) { return(this.VisitJoinExpressionBase(expression, LinqBuilder.Join)); }