internal static Expression Rebind(ParameterExpression parameter, string prefix, IElasticMapping mapping, Expression selector) { var visitor = new ElasticFieldsProjectionExpressionVisitor(parameter, mapping); Argument.EnsureNotNull("selector", selector); return(visitor.Visit(selector)); }
/// <summary> /// We are using the whole entity in a new select projection. Re-bind any ElasticField references to JObject /// and ensure the entity parameter is a freshly materialized entity object from our default materializer. /// </summary> /// <param name="selectExpression">Select expression to re-bind.</param> /// <param name="entityParameter">Parameter that references the whole entity.</param> private void RebindElasticFieldsAndChainProjector(Expression selectExpression, ParameterExpression entityParameter) { var projection = ElasticFieldsProjectionExpressionVisitor.Rebind(projectionParameter, prefix, mapping, selectExpression); var compiled = Expression.Lambda(projection, entityParameter, projectionParameter).Compile(); itemProjector = h => compiled.DynamicInvoke(DefaultItemProjector(h), h); finalItemType = selectExpression.Type; }
internal static Expression Rebind(ParameterExpression parameter, string prefix, IElasticMapping mapping, Expression selector) { var visitor = new ElasticFieldsProjectionExpressionVisitor(parameter, mapping); Argument.EnsureNotNull("selector", selector); return visitor.Visit(selector); }