Что было бы эффективным способом разбиения на страницы с помощью поиска в 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 но единственное, что я могу сделать, это указать размер страницы.
Итак, единственный способ получить все результаты на клиенте и сделать там Пропустить и подсчитать? Я действительно надеюсь, что есть более эффективные способы достижения этого непосредственно на контроллере домена.