我试图根据部门,然后按名称(按字母顺序排列)获取已排序的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();
但同样,这只是按名称排序。我需要按部门分组的所有用户,并按名称排序。
答案 0 :(得分:0)
将SearchResultCollection
投射到IEnumerable
,然后使用您开发的自定义IComparer
进行排序
var results = search.FindAll().Cast<SearchResult>()
.Sort(/*your IComparer<SearchResult>*/);
在客户端对结果进行排序,因为AD中的服务器端排序是资源密集型的。
此外 - 如果你有AD 2000,它不支持搜索多个属性