基于c#中的两个属性对directorySearcher进行排序

时间:2016-07-13 11:59:02

标签: c# sorting ldap directoryentry directorysearcher

我试图根据部门,然后按名称(按字母顺序排列)获取已排序的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(); 

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

1 个答案:

答案 0 :(得分:0)

SearchResultCollection投射到IEnumerable,然后使用您开发的自定义IComparer进行排序

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

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

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