2012-04-14 6 views
3

Ich habe den folgenden Code:Sortieren der Ergebnisse einer Directory Abfrage von 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(); 

Ich möchte die Ergebnisse der whenCreated Eigenschaft sortieren in absteigender Reihenfolge, so dass die neuesten Computerobjekte an der Spitze sind.

Ich kann nicht einfach tun:

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

, da der Server einen Fehler zurückgibt (http://social.technet.microsoft.com/Forums/en-US/winserverDS/thread/183a8f2c-0cf7-4081 -9110-4cf41b91dcbf /)

Was ist der beste Weg, um dies zu sortieren?

Antwort

0

comparer erstellen, vergleicht die Search Instanzen durch ihre whencreated Eigenschaft

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

und dann alle Elemente kopieren aufzulisten, das diesen Vergleich verwenden Elemente für Sie zu sortieren:

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

Im Allgemeinen gelöst, ich mit einer Lösung wie die oben als Server-Seite Sorten in AD sind beide ressourcenintensiv und fehleranfällig mit großen Ergebnismengen haften würde. –

+0

Vielen Dank für die Antwort, ich denke, das wird funktionieren. Ich werde sehen, was ich tun kann. – Dbloom

+0

Ich habe schließlich eine Klasse erstellt, die alle AD-Attribute für mich enthält, und dann eine SortedList 'erstellt. Dies erlaubte mir, die Elemente der Liste automatisch nach Datum geordnet zu halten, und die Reihenfolge umzukehren war so einfach wie: 'IEnumerable > revList = oldCompsList.Reverse();' – Dbloom

0

Sie können Führen Sie die Serverseite gemäß MSDN here aus:

Das verknüpfte Problem Thread gelöst:

Wir haben das gleiche Problem auf AD Windows 2008 R2

  • angewendet kb977180-v2 http://support.microsoft.com/kb/977180
  • und addierte Schlüssel HKLM \ System \ CurrentControlSet \ Services \ NTDS \ Parameters
  • hinzufügen String-Wert „DSA Heuristik“
  • Setzen Sie den Wert 000000000001
  • Neustart
  • nachdem dieses Problem
Verwandte Themen