【发布时间】:2014-03-04 21:07:34
【问题描述】:
在 .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,但我唯一能做的就是指定页面大小。
那么,在客户端获取所有结果并在那里执行 Skip and Count 的唯一方法是什么?真心希望有更有效的方法可以直接在域控制器上实现。
【问题讨论】:
-
如果您指定大小限制活动目录将返回第一个条目,直到符合您的条件的大小限制,所以我看到它的唯一方法是返回所有内容,然后通过配置开始过滤您自己的大小限制和页数
-
您可以将 zie 限制指定为高数,它将分布在您指定的页数上
-
也许this 会有所帮助。
标签: c# .net active-directory