Ваша проблема в том, что вы используете System.DirectoryServices.AccountManagement ... Хотя я ненавижу это говорить, к сожалению, это правда. Внутреннее управление AccountManagement заключается в том, что он выполняет отдельный запрос LDAP для отдельного извлечения каждого элемента. Поэтому, когда вы перебираете членов, он делает отдельный обратный вызов через LDAP для каждого участника. Вместо этого вы хотите выполнить запрос LDAP с помощью System.DirectoryServices.DirectorySearcher.
Я предполагаю, что отдел - это группа, основанная на том, как вы ее используете. Вот как бы я это сделал. (мой код в VB.Net ... извините). Убедитесь, что получили полностью определенное DN для своей группы, или посмотрите его заранее и включите в запрос.
Dim results = LDAPQuery("(memberOf=CN=Fully,OU=Qualified,DC=Group,DC=Distinguished,DC=Name)", New String() {"mobile", "description"})
Dim emps = (from c as System.DirectoryServices.SearchResult in results _
Select New Employee() {.Name = c.Properties("description"), .Mobile = c.Properties("mobile")}).ToList()
Public Function LDAPQuery(ByVal query As String, ByVal attributes As String()) As SearchResultCollection
'create directory searcher from CurrentADContext (no special security available)
Dim ds As New DirectorySearcher(System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain().GetDirectoryEntry())
ds.PageSize = 1000
'set filter string
ds.Filter = query
'specify properties to retrieve
ds.PropertiesToLoad.AddRange(attributes)
'get results
Dim results As SearchResultCollection = ds.FindAll()
Return results
End Function