/// <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(LinqNewExpression expression) { var members = expression.Members.Select(this.ResolveTypes).ToList(); var type = new QueryAnonymousStructuralType(this.EvaluationStrategy); for (int i = 0; i < members.Count; i++) { type.Add(QueryProperty.Create(expression.MemberNames[i], members[i].ExpressionType)); } return(LinqBuilder.New(expression.MemberNames, members, type)); }
/// <summary> /// Visits a <see cref="QueryAnonymousStructuralType"/>. /// </summary> /// <param name="type">Query type being visited.</param> /// <returns>The result of visiting this query type.</returns> public ComparisonResult Visit(QueryAnonymousStructuralType type) { return(this.parent.CompareAnonymous((QueryStructuralValue)this.expectedValue, this.actualValue, this.path, this.shouldThrow)); }
/// <summary> /// Creates a QueryValue of a given type. /// </summary> /// <param name="type">Type of the QueryValue that will be generated.</param> /// <returns>QueryValue representing the provided object.</returns> public QueryValue Visit(QueryAnonymousStructuralType type) { var resultFragment = this.ResultFragmentStack.Pop(); return(this.PopulateProperties(type.CreateNewInstance(), resultFragment)); }