2012-04-14 3 views
3

У меня есть следующий код:Сортировка результатов запроса DirectorySearcher по DateTime

// Declare new DirectoryEntry and DirectorySearcher 
DirectoryEntry domainRoot = new DirectoryEntry("LDAP://rootDSE"); 
string rootOfDomain = domainRoot.Properties["rootDomainNamingContext"].Value.ToString(); 
DirectorySearcher dsSearch = new DirectorySearcher(rootOfDomain); 

// Set the properties of the DirectorySearcher 
dsSearch.Filter = "(objectClass=Computer)"; 
dsSearch.PropertiesToLoad.Add("whenCreated"); 
dsSearch.PropertiesToLoad.Add("description"); 
dsSearch.PropertiesToLoad.Add("operatingSystem"); 
dsSearch.PropertiesToLoad.Add("name"); 

// Execute the search 
SearchResultCollection computersFound = dsSearch.FindAll(); 

Я хочу, чтобы отсортировать результаты по whenCreated собственности в порядке убывания, так что новейшие компьютерные объекты находятся на вершине.

Я не могу просто сделать:

SortOption sortedResults = new SortOption("whenCreated", SortDirection.Descending); 
dsSearch.Sort = sortedResults; 

, потому что сервер возвращает ошибку (http://social.technet.microsoft.com/Forums/en-US/winserverDS/thread/183a8f2c-0cf7-4081 -9110-4cf41b91dcbf /)

Что такое лучший способ отсортировать это?

ответ

0

Создания компаратора, который сравнивает экземпляры SEARCHRESULT их whenCreated собственности

public class SearchResultComparer : Comparer<SearchResult> 
{ 
    public override int Compare(SearchResult x, SearchResult y) 
    { 
     //Compare two SearchResult instances by their whenCreated property 
    } 
} 

, а затем скопировать все элементы в список, который будет использовать этот компаратор для сортировки предметов для вас:

List<SearchResult> SearchResultList = new List<SearchResult>(computersFound); 
SearchResultList.Sort(new SearchResultComparer()); 
+0

В общем, я бы придерживаться решения, как показано выше, как на стороне сервера видов в AD являются ресурсоемкими и отказ склонным с большими наборами результатов. –

+0

Спасибо за ответ, я думаю, что это сработает. Посмотрю, что я могу сделать. – Dbloom

+0

В результате я создал класс, который содержит все атрибуты AD для меня, а затем создал SortedList '. Это позволило мне сохранить элементы списка по порядку по дате автоматически, а изменение порядка было таким же простым, как: «IEnumerable > revList = oldCompsList.Reverse(); ' – Dbloom

0

Вы можете сделайте это на стороне сервера, как указано в MSDN here:

 new DirectorySearcher(entry) 
     { 
     Sort = new SortOption("cn", SortDirection.Ascending), 
     PropertiesToLoad = {"cn"} 
     }; 

Связанная проблема резьбы решается:

У нас есть один и тот же вопрос в AD Windows 2008 R2

  • применяется kb977180-v2 http://support.microsoft.com/kb/977180
  • и добавил ключ HKLM \ System \ CurrentControlSet \ Services \ NTDS \ Parameters
  • Добавить значение String «АСС эвристика»
  • Установите значение 000000000001
  • перезапустить
  • после этого проблема решена
Смежные вопросы