public Expression BindParameter(ParameterExpression parameter, Dictionary <Expression, Expression> processedExpressions)
        {
            Expression result;

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

            var entityExpression = (EntityExpression)EntityExpression.BindParameter(parameter, processedExpressions);
            var rankExpression   = (ColumnExpression)RankExpression.BindParameter(parameter, processedExpressions);

            return(new FullTextExpression(FullTextIndex, entityExpression, rankExpression, parameter));
        }
        public static EntityExpression Create(EntityFieldExpression entityFieldExpression, int offset)
        {
            var typeInfo      = entityFieldExpression.PersistentType;
            var fields        = new List <PersistentFieldExpression>();
            var keyExpression = KeyExpression.Create(typeInfo, offset);

            fields.Add(keyExpression);
            foreach (var nestedField in typeInfo.Fields)
            {
                fields.Add(BuildNestedFieldExpression(nestedField, offset));
            }
            var result = new EntityExpression(typeInfo, keyExpression, null, entityFieldExpression.DefaultIfEmpty)
            {
                Fields = fields
            };

            if (entityFieldExpression.OuterParameter == null)
            {
                return(result);
            }
            return((EntityExpression)result.BindParameter(entityFieldExpression.OuterParameter, new Dictionary <Expression, Expression>()));
        }