Что было бы эффективным способом разбиения на страницы с помощью поиска в Active Directory в.NET? Есть много способов поиска в AD, но до сих пор я не мог найти, как это сделать эффективно. Я хочу иметь возможность указывать параметры Skip
и Take
и иметь возможность получить общее количество записей, соответствующих моим критериям поиска в результате.
Я пробовал поиск в классе PrincipalSearcher
:
using (var ctx = new PrincipalContext(ContextType.Domain, "FABRIKAM", "DC=fabrikam,DC=com"))
using (var criteria = new UserPrincipal(ctx))
{
criteria.SamAccountName = "*foo*";
using (var searcher = new PrincipalSearcher(criteria))
{
((DirectorySearcher)searcher.GetUnderlyingSearcher()).SizeLimit = 3;
var results = searcher.FindAll();
foreach (var found in results)
{
Console.WriteLine(found.Name);
}
}
}
Здесь мне удалось ограничить результаты поиска до 3, но мне не удалось получить общее количество записей, соответствующих моим критериям поиска (SamAccountName
содержит foo
), ни я не смог указать поисковому пользователю пропустить первые 50 записей для пример.
Я также попытался использовать System.DirectoryServices.DirectoryEntry
и System.DirectoryServices.Protocols.SearchRequest
но единственное, что я могу сделать, это указать размер страницы.
Итак, единственный способ получить все результаты на клиенте и сделать там Пропустить и подсчитать? Я действительно надеюсь, что есть более эффективные способы достижения этого непосредственно на контроллере домена.