什么是一种有效的方式来分页与.NET中的Active Directory搜索?在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
但我唯一能做的就是指定页面大小。
那么,只有这样才能在客户端获取所有结果并执行跳过和计数?我真的希望有更直接在域控制器上实现这一点的更有效方法。
如果sepcified大小限制的Active Directory将返回第一个条目到你的大小限制符合你的标准,所以我看到的唯一方法是通过配置尺寸返回的一切,然后开始过滤自己限制和页数 –
您可以指定zie限制为高数字,它将分配到您确定的页数 –
也许[this](http://zetetic.net/blog/2012/4/23/virtual -list-view-vlv-and-active-directory-what-it-good-for.html)会有所帮助。 –