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));
        }
Пример #2
0
        /// <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);
 }