Disco.Services.Interop.ActiveDirectory.ADDomainController.RetrieveADOrganisationalUnitStructure C# (CSharp) Method

RetrieveADOrganisationalUnitStructure() public method

public RetrieveADOrganisationalUnitStructure ( ) : List
return List
        public List<ADOrganisationalUnit> RetrieveADOrganisationalUnitStructure()
        {
            Dictionary<string, List<ADOrganisationalUnit>> resultTree = new Dictionary<string, List<ADOrganisationalUnit>>();

            var unsortedOrganisationalUnits = this.SearchEntireDomain(OrganisationalUnitsLdapFilter, OrganisationalUnitsLoadProperties)
                .Select(r => r.AsADOrganisationalUnit()).ToList();

            var indexedOrganisationalUnits = unsortedOrganisationalUnits.ToDictionary(k => k.DistinguishedName);

            var indexedChildren = unsortedOrganisationalUnits
                .GroupBy(ou => ou.DistinguishedName.Substring(ou.DistinguishedName.IndexOf(',') + 1))
                .ToDictionary(g => g.Key, g => g.ToList());

            // Link Children
            foreach (var ouChildren in indexedChildren)
            {
                ADOrganisationalUnit ouParent;
                if (indexedOrganisationalUnits.TryGetValue(ouChildren.Key, out ouParent))
                {
                    ouParent.Children = ouChildren.Value;
                }
            }

            return indexedChildren[Domain.DistinguishedName];
        }
        #endregion