/* * 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); } } }