Ejemplo n.º 1
0
        public IEnumerable <T> ExecuteCollection <T>(QueryModel queryModel)
        {
            var selectQuery = HabQueryModelVisitor.GenerateSelectQuery(queryModel);

            var businessObjectCollection = BORegistry.DataAccessor.BusinessObjectLoader.GetBusinessObjectCollection(selectQuery.ClassDef, selectQuery);

            if (typeof(T) == selectQuery.ClassDef.ClassType)
            {
                return((from object obj in businessObjectCollection select(T) obj).ToList());
            }

            var expression = queryModel.SelectClause.Selector;

            if (expression.NodeType == ExpressionType.MemberAccess)
            {
                var    member = (MemberExpression)expression;
                string name   = member.Member.Name;
                return(new PropertyEnumerator <T>(businessObjectCollection, name));
            }
            else if (expression.NodeType == ExpressionType.New)
            {
                var newExpression = (NewExpression)expression;
                var propertyNames = newExpression.Members.Select(info => info.Name);
                return(new NewEnumerator <T>(businessObjectCollection, newExpression.Constructor, propertyNames));
            }

            return(new List <T>());
        }
Ejemplo n.º 2
0
        private ISelectQuery _selectQuery;// = new SelectQuery();

        public static ISelectQuery GenerateSelectQuery(QueryModel queryModel)
        {
            var visitor = new HabQueryModelVisitor();

            visitor.VisitQueryModel(queryModel);
            return(visitor.GetSelectQuery());
        }