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>()); }
private ISelectQuery _selectQuery;// = new SelectQuery(); public static ISelectQuery GenerateSelectQuery(QueryModel queryModel) { var visitor = new HabQueryModelVisitor(); visitor.VisitQueryModel(queryModel); return(visitor.GetSelectQuery()); }