public override Expression BindParameter(
            ParameterExpression parameter, Dictionary <Expression, Expression> processedExpressions)
        {
            if (processedExpressions.TryGetValue(this, out var result))
            {
                return(result);
            }

            var newFields = new List <PersistentFieldExpression>(fields.Count);

            foreach (var field in fields)
            {
                // Do not convert to LINQ. We want to avoid a closure creation here.
                newFields.Add((PersistentFieldExpression)field.BindParameter(parameter, processedExpressions));
            }
            var keyExpression = (KeyExpression)Key.BindParameter(parameter, processedExpressions);
            var entity        = (EntityExpression)Entity?.BindParameter(parameter, processedExpressions);

            result = new EntityFieldExpression(
                PersistentType, Field, newFields, Mapping, keyExpression, entity, parameter, DefaultIfEmpty);
            if (Owner == null)
            {
                return(result);
            }

            processedExpressions.Add(this, result);
            Owner.BindParameter(parameter, processedExpressions);
            return(result);
        }
예제 #2
0
        public override Expression BindParameter(ParameterExpression parameter, Dictionary <Expression, Expression> processedExpressions)
        {
            Expression result;

            if (processedExpressions.TryGetValue(this, out result))
            {
                return(result);
            }

            var fields = Fields
                         .Select(f => f.BindParameter(parameter, processedExpressions))
                         .Cast <PersistentFieldExpression>()
                         .ToList();
            var keyExpression = (KeyExpression)Key.BindParameter(parameter, processedExpressions);
            var entity        = Entity != null
        ? (EntityExpression)Entity.BindParameter(parameter, processedExpressions)
        : null;

            result = new EntityFieldExpression(PersistentType, Field, fields, Mapping, keyExpression, entity, parameter, DefaultIfEmpty);
            if (Owner == null)
            {
                return(result);
            }

            processedExpressions.Add(this, result);
            Owner.BindParameter(parameter, processedExpressions);
            return(result);
        }
        public Expression BindParameter(ParameterExpression parameter, Dictionary <Expression, Expression> processedExpressions)
        {
            Expression value;

            if (processedExpressions.TryGetValue(this, out value))
            {
                return(value);
            }

            var keyExpression = (KeyExpression)Key.BindParameter(parameter, processedExpressions);
            var result        = new EntityExpression(PersistentType, keyExpression, parameter, DefaultIfEmpty);

            processedExpressions.Add(this, result);
            result.Fields = Fields
                            .Select(f => f.BindParameter(parameter, processedExpressions))
                            .Cast <PersistentFieldExpression>()
                            .ToList();
            return(result);
        }