0

我正在尝试SearchResultCollection根据部门,然后按名称(均按字母顺序)获取排序对象。我正在尝试加载两个属性,但这仅采用指定的最后一个属性并根据该属性对其进行排序。

我当前的代码如下:

DirectoryEntry entry = new DirectoryEntry(ConfigurationManager.AppSettings["LDAP"]);
DirectorySearcher search = new DirectorySearcher(entry)
{
    SearchScope = SearchScope.Subtree,
    Filter = "(&(objectClass=user)(physicalDeliveryOfficeName=Dartmouth))"
};
search.PropertiesToLoad.Add("name");
search.PropertiesToLoad.Add("phone");
search.PropertiesToLoad.Add("email");
search.PropertiesToLoad.Add("department");

search.Sort.Direction = System.DirectoryServices.SortDirection.Ascending;
search.Sort.PropertyName = "department";
search.Sort.PropertyName = "name";

SearchResultCollection result = search.FindAll(); 

但同样,这只是按名称排序。我需要按部门分组的所有用户,然后按名称排序。

4

1 回答 1

0

将其SearchResultCollection转换为IEnumerable然后使用IComparer您开发的自定义进行排序

var results = search.FindAll().Cast<SearchResult>()
                              .Sort(/*your IComparer<SearchResult>*/);

在客户端对结果进行排序,因为 AD 中的服务器端排序是资源密集型的。

此外 - 如果您有 AD 2000,它不支持搜索多个属性

于 2016-07-13T12:03:09.860 回答