private IEnumerable <TerritoryPart> GetTerritoryParents(TerritoryQueryContext context) { IEnumerable <TerritoryPart> list; var root = context.ForTerritory; // make sure root we'll use belongs to hierarchy if (root.HierarchyPart.Id != ConfiguredHierarchy.Id) { root = SingleTerritory(root.Record.TerritoryInternalRecord.Id); } if (root == null) { // if the root is not valid for the hierarchy, we cannot return // any city. return(Enumerable.Empty <TerritoryPart>()); } var rootPath = root.TerritoriesFullPath; var parentIds = rootPath.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries).Select(x => { int id = 0; int.TryParse(x, out id); return(id); }).ToList(); parentIds.ToList().Remove(root.Id); var queryHints = new QueryHints() .ExpandRecords <TerritoryAdministrativeTypePartRecord, TitlePartRecord>(); var query = _contentManager.Query(); query = query .Join <TerritoryAdministrativeTypePartRecord>() .Where(x => x.AdministrativeType == context.TerritoryAdministrativeType.Value && parentIds.Contains(x.Id)) .Join <TitlePartRecord>() .OrderBy(x => x.Title); if (context.MaxResultItems.HasValue) { list = query .ForPart <TerritoryPart>() .Join <TerritoryPartRecord>() .Slice(0, context.MaxResultItems.Value); } else { list = query .ForPart <TerritoryPart>() .Join <TerritoryPartRecord>() .List(); } return(list); }
// Refactorized END private IEnumerable <TerritoryPart> GetTerritoryChildren(TerritoryQueryContext context) { IEnumerable <TerritoryPart> list; var root = context.ForTerritory; // make sure root we'll use belongs to hierarchy if (root.HierarchyPart.Id != ConfiguredHierarchy.Id) { root = SingleTerritory(root.Record.TerritoryInternalRecord.Id); } if (root == null) { // if the root is not valid for the hierarchy, we cannot return // any city. return(Enumerable.Empty <TerritoryPart>()); } var rootPath = root.TerritoriesFullPath; var query = _contentManager.Query(); query = query.Join <TerritoryPartRecord>() .Where(x => x.TerritoriesFullPath.StartsWith(rootPath) && x.Hierarchy.Id == ConfiguredHierarchy.Id); if (context.AddressRecordType.HasValue) { query = query.Join <TerritoryAdministrativeTypePartRecord>() .Where(x => x.AdministrativeType == context.TerritoryAdministrativeType.Value); } if (context.AddressRecordType.HasValue) { if (context.AddressRecordType == AddressRecordType.ShippingAddress) { query = query.Join <TerritoryAddressTypePartRecord>() .Where(x => x.Shipping); } else if (context.AddressRecordType == AddressRecordType.BillingAddress) { query = query.Join <TerritoryAddressTypePartRecord>() .Where(x => x.Billing); } } if (!string.IsNullOrWhiteSpace(context.Filter)) { query = query.Join <TitlePartRecord>() .Where(x => x.Title.Contains(context.Filter)) .OrderBy(x => x.Title); } else { query = query.Join <TitlePartRecord>() .OrderBy(x => x.Title); } if (context.MaxResultItems.HasValue) { list = query .ForPart <TerritoryPart>() .Join <TerritoryPartRecord>() .Slice(0, context.MaxResultItems.Value); } else { list = query .ForPart <TerritoryPart>() .Join <TerritoryPartRecord>() .List(); } return(list); }