protected virtual Expression VisitEntity(EntityExpression expr)
 {
     Expression e = Visit(expr.Expression);
     if (e != expr.Expression)
     {
         return new EntityExpression(expr.AssociationPath, expr.Alias, expr.Type, expr.MetaData, e);
     }
     return expr;
 }
        protected PropertyAccessExpression(string name, System.Type type, IType nhibernateType, EntityExpression expression, NHibernateExpressionType nodeType)
            : base(nodeType, type)
        {
            if (String.IsNullOrEmpty(name)) throw new ArgumentNullException("name");
            if (type == null) throw new ArgumentNullException("type");
            if (nhibernateType == null) throw new ArgumentNullException("nhibernateType");
            if (expression == null) throw new ArgumentNullException("expression");

            _name = name;
            _expression = expression;
            _nhibernateType = nhibernateType;
        }
        protected override Expression VisitCollectionAccess(CollectionAccessExpression expr)
        {
            EntityExpression elementExpression = expr.ElementExpression;
            if (elementExpression == null)
                return expr;

            string alias = FindCollectionAlias(elementExpression.Type);

            if (String.IsNullOrEmpty(alias))
                return expr;

            elementExpression = new EntityExpression(elementExpression.AssociationPath, alias, elementExpression.Type, elementExpression.MetaData, elementExpression.Expression);
            return new CollectionAccessExpression(expr.Name, expr.Type, expr.NHibernateType, expr.Expression, elementExpression);
        }
        protected override Expression VisitMemberAccess(MemberExpression expr)
        {
            expr = (MemberExpression)base.VisitMemberAccess(expr);

            IClassMetadata metaData = GetMetaData(expr.Type);
            if (metaData != null)
            {
                string associationPath = AssociationPathForEntity(expr);
                return new EntityExpression(associationPath, expr.Member.Name, expr.Type, metaData,
                    expr.Expression, _addedAlias);
            }

            string memberName;
            IType nhibernateType;
            EntityExpression parentExpression = GetParentExpression(expr, out memberName, out nhibernateType);

            if (parentExpression != null)
            {
                if (nhibernateType.IsCollectionType)
                {
                    CollectionType collectionType = (CollectionType)nhibernateType;
                    IType nhElementType = collectionType.GetElementType((ISessionFactoryImplementor)_sessionFactory);

                    System.Type elementType = nhElementType.ReturnedClass;
                    IClassMetadata elementMetaData = GetMetaData(elementType);

                    EntityExpression elementExpression = null;
                    if (elementMetaData != null)
                        elementExpression = new EntityExpression(null, memberName, elementType,
                            elementMetaData, null, _addedAlias);

                    return new CollectionAccessExpression(memberName, expr.Type, nhibernateType, parentExpression, elementExpression);
                }

                return new PropertyAccessExpression(memberName, expr.Type, nhibernateType, parentExpression);
            }

            return expr;
        }
Beispiel #5
0
        protected PropertyAccessExpression(string name, System.Type type, IType nhibernateType, EntityExpression expression, NHibernateExpressionType nodeType)
            : base(nodeType, type)
        {
            if (String.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            if (nhibernateType == null)
            {
                throw new ArgumentNullException("nhibernateType");
            }
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            _name           = name;
            _expression     = expression;
            _nhibernateType = nhibernateType;
        }
        private bool IsRootEntity(EntityExpression expr)
        {
            var nhExpression = expr.Expression as NHibernateExpression;

            if (nhExpression != null)
                return false;

            if (expr.Type != rootCriteria.GetRootType())
                return false;

            return true;
        }
        protected override Expression VisitEntity(EntityExpression expr)
        {
            expr = (EntityExpression)base.VisitEntity(expr);

            if (currentCriteria.GetCriteriaByAlias(expr.Alias) != null || !IsRootEntity(expr))
            {
                if (!String.IsNullOrEmpty(expr.AssociationPath))
                    currentCriteria = EnsureCriteria(expr.AssociationPath, expr.Alias);

                ResetMemberName(expr.Alias + ".");
            }
            currentAssociationPath = expr.AssociationPath;
            currentExpression = expr;
            isQueringEntity = true;

            return expr;
        }
 protected override Expression VisitEntity(EntityExpression expr)
 {
     Type = BinaryCriterionType.Property;
     Name = MemberNameVisitor.GetMemberName(rootCriteria, expr);
     return expr;
 }
Beispiel #9
0
 public PropertyAccessExpression(string name, System.Type type, IType nhibernateType, EntityExpression expression)
     : this(name, type, nhibernateType, expression, NHibernateExpressionType.PropertyAccess)
 {
 }
 public CollectionAccessExpression(string name, System.Type type, IType nhibernateType,
     EntityExpression expression, EntityExpression elementExpression)
     : base(name, type, nhibernateType, expression, NHibernateExpressionType.CollectionAccess)
 {
     _elementExpression = elementExpression;
 }
        protected override Expression VisitEntity(EntityExpression expr)
        {
            if (_rootCriteria.GetCriteriaByAlias(expr.Alias) != null)
            {
                _transformer = new LinqJoinResultsTransformer(expr.Type);
            }

            return expr;
        }
 public PropertyAccessExpression(string name, System.Type type, IType nhibernateType, EntityExpression expression)
     : this(name, type, nhibernateType, expression, NHibernateExpressionType.PropertyAccess)
 {
 }
 protected override Expression VisitEntity(EntityExpression expr)
 {
     Type = BinaryCriterionType.Property;
     return expr;
 }
 protected override Expression VisitEntity(EntityExpression expr)
 {
     this.Expression = expr;
     if (_findFirstEntity) return expr;
     return base.VisitEntity(expr);
 }
 public CollectionAccessExpression(string name, System.Type type, IType nhibernateType,
                                   EntityExpression expression, EntityExpression elementExpression)
     : base(name, type, nhibernateType, expression, NHibernateExpressionType.CollectionAccess)
 {
     _elementExpression = elementExpression;
 }