public IEnumerator <ADObjectWrapper> GetEnumerator() { int batchSize = 500; var context = SynchronizeContext.Current; var neededProperties = this.propertiesToGet ?? SynchronizeHelper.GetNeededProperties(ADSchemaType.Users); IEnumerable <SearchResult> aBatch; for (int i = 0; i < source.Count / batchSize; i++) { aBatch = GetBatchData(i * batchSize, batchSize, context, neededProperties); foreach (var item in aBatch) { yield return(CreateADObjectWrapper(item, neededProperties, context)); } } aBatch = GetBatchData(source.Count / batchSize * batchSize, source.Count % batchSize, context, neededProperties); foreach (var item in aBatch) { yield return(CreateADObjectWrapper(item, neededProperties, context)); } }