Пример #1
0
        /*
         * Consider reimplementing this
         */
        private void AddParents(Models.Area area, DbDataReader rdr)
        {
            List <Models.Area> parentAreas = new List <Models.Area>();

            foreach (Models.AreaType areaType in
                     AreaTypeMappings.GetAreaTypes())
            {
                string areaTypeName = areaType.Id;
                string columnName   = "parent_" + areaTypeName;

                if (!Enumerable.Range(0, rdr.FieldCount).Any(
                        i => rdr.GetName(i) == columnName))
                {
                    continue;
                }

                if (Convert.IsDBNull(rdr[columnName]))
                {
                    continue;
                }
                int areaId = (int)Convert.ToInt32(rdr[columnName]);
                if (!this.areaLists.Keys.Contains(areaTypeName))
                {
                    Queries.AreaQuery query = new Queries.AreaQuery();
                    query.AreaTypeIdIs = areaTypeName;

                    // ToList() iterates the generator here, else
                    // things will be slow
                    this.areaLists[areaTypeName] =
                        (IEnumerable <Models.Area>) this.FindAll(query, true).ToList();
                }
                IEnumerable <Models.Area> parentArea = (
                    from a in this.areaLists[areaTypeName]
                    where a.Id == areaId
                    select a);
                if (parentArea.Count() == 0)
                {
                    continue;
                }
                parentAreas.Add(parentArea.Single());
            }
            area.ParentAreas = parentAreas;
        }
        public virtual IEnumerable <Models.Area> GetAreas(
            string areaTypeId,
            string filter = null)
        {
            var query = new Queries.AreaQuery();

            query.AreaTypeIdIs = areaTypeId;
            if (filter != null)
            {
                query.AreaFilterQueryString = filter;
            }
            using (DbConnection db = this.GetDbConnection()) {
                var repository = new Repositories.AreaRepository(
                    db, new Queries.ISqlQuery[] { query });
                foreach (Models.Area r in repository.FindAll())
                {
                    yield return(r);
                }
            }
        }