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); }
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); }