Disco.Services.Interop.ActiveDirectory.ADDomain.SearchScope C# (CSharp) Method

SearchScope() public method

public SearchScope ( string LdapFilter, string LoadProperties, int ResultLimit = null ) : IEnumerable
LdapFilter string
LoadProperties string
ResultLimit int
return IEnumerable
        public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null)
        {
            var searchScope = this.SearchContainers;

            // No scope set, search entire domain
            if (searchScope == null)
                return SearchEntireDomain(LdapFilter, LoadProperties, ResultLimit);

            switch (searchScope.Count)
            {
                case 0: // Ignore domain                    
                    return Enumerable.Empty<ADSearchResult>();

                case 1: // Single-search
                    return SearchInternal(searchScope[0], LdapFilter, LoadProperties, ResultLimit);

                default: // Multi-search - Parallelize

                    var queryTasks = searchScope.Select(scope =>
                        Task<IEnumerable<ADSearchResult>>.Factory.StartNew(() =>
                            SearchInternal(scope, LdapFilter, LoadProperties, ResultLimit))).ToArray();

                    // Block
                    Task.WaitAll(queryTasks);

                    var results = queryTasks.SelectMany(t => t.Result);
                    if (ResultLimit.HasValue)
                        results = results.Take(ResultLimit.Value);
                    return results;
            }
        }