Пример #1
0
        public override Expression GetMemberExpression(Expression root, MappingEntity entity, MemberInfo member)
        {
            if (this.mapping.IsAssociationRelationship(entity, member))
            {
                MappingEntity        relatedEntity   = this.mapping.GetRelatedEntity(entity, member);
                ProjectionExpression queryExpression = this.GetQueryExpression(relatedEntity);
                List <MemberInfo>    list            = this.mapping.GetAssociationKeyMembers(entity, member).ToList <MemberInfo>();
                List <MemberInfo>    list2           = this.mapping.GetAssociationRelatedKeyMembers(entity, member).ToList <MemberInfo>();
                Expression           expression2     = null;
                int num   = 0;
                int count = list2.Count;
                while (num < count)
                {
                    Expression expression3 = this.GetMemberExpression(queryExpression.Projector, relatedEntity, list2[num]).Equal(this.GetMemberExpression(root, entity, list[num]));
                    expression2 = (expression2 != null) ? expression2.And(expression3) : expression3;
                    num++;
                }
                TableAlias           newAlias   = new TableAlias();
                ProjectedColumns     columns    = ColumnProjector.ProjectColumns(this.translator.Linguist.Language, queryExpression.Projector, null, newAlias, new TableAlias[] { queryExpression.Select.Alias });
                LambdaExpression     aggregator = Aggregator.GetAggregator(King.Framework.Linq.TypeHelper.GetMemberType(member), typeof(IEnumerable <>).MakeGenericType(new Type[] { columns.Projector.Type }));
                ProjectionExpression expression = new ProjectionExpression(new SelectExpression(newAlias, columns.Columns, queryExpression.Select, expression2), columns.Projector, aggregator);
                return(this.translator.Police.ApplyPolicy(expression, member));
            }
            AliasedExpression expression6 = root as AliasedExpression;

            if ((expression6 != null) && this.mapping.IsColumn(entity, member))
            {
                return(new ColumnExpression(King.Framework.Linq.TypeHelper.GetMemberType(member), this.GetColumnType(entity, member), expression6.Alias, this.mapping.GetColumnName(entity, member)));
            }
            return(QueryBinder.BindMember(root, member));
        }
Пример #2
0
        protected virtual void AddAliases(Expression expr)
        {
            AliasedExpression expression = expr as AliasedExpression;

            if (expression != null)
            {
                this.AddAlias(expression.Alias);
            }
            else
            {
                JoinExpression expression2 = expr as JoinExpression;
                if (expression2 != null)
                {
                    this.AddAliases(expression2.Left);
                    this.AddAliases(expression2.Right);
                }
            }
        }
        protected override Expression VisitJoin(JoinExpression join)
        {
            Expression expression = base.VisitJoin(join);

            join = expression as JoinExpression;
            if (join != null)
            {
                AliasedExpression right = join.Right as AliasedExpression;
                if (right != null)
                {
                    AliasedExpression expression3 = (AliasedExpression)this.FindSimilarRight(join.Left as JoinExpression, join);
                    if (expression3 != null)
                    {
                        this.map.Add(right.Alias, expression3.Alias);
                        return(join.Left);
                    }
                }
            }
            return(expression);
        }
Пример #4
0
        protected override Expression VisitJoin(JoinExpression join)
        {
            Expression expression;
            Expression expression4;

            if (join.Join == JoinType.SingletonLeftOuter)
            {
                AliasedExpression expression2 = this.Visit(join.Right) as AliasedExpression;
                if (!((expression2 == null) || this.allColumnsUsed.ContainsKey(expression2.Alias)))
                {
                    return(this.Visit(join.Left));
                }
                Expression expression3 = this.Visit(join.Condition);
                expression4 = this.Visit(join.Left);
                expression  = this.Visit(join.Right);
                return(base.UpdateJoin(join, join.Join, expression4, expression, expression3));
            }
            Expression condition = this.Visit(join.Condition);

            expression  = this.VisitSource(join.Right);
            expression4 = this.VisitSource(join.Left);
            return(base.UpdateJoin(join, join.Join, expression4, expression, condition));
        }