2016-04-01 12 views
0

ユーザーの入力文字列をActive Directoryで検索するコードがあります。私は検索のために返される結果の数を(20に)制限します。次に、Active Directoryによって作成された日付を降順でソートします。ただし、特定のユーザー(例: 'Smith')に20以上の結果(100など)がある場合、作成日によってソートされた20人のユーザーが表示されますが、100人のうち最後の20人です私は最初の20を作成する日付でソートされます。私はSizeLimitを削除すると、すべての結果が正しくソートされた順序で取得します。以下は私のコードですが、何を調整する必要があるのか​​分かりません。DirectorySearcher SizeLimitとList.Sort不要な結果を生成するC#

 public void getADSearchResults(string searchString) 
     { 

      //Create list to hold ADUser objects 
      List<ADUser> users = new List<ADUser>(); 
      string[] allUsers = searchString.Split(new Char[] { ',' }, userSearchLimit); 

      var json = ""; 

      foreach (string name in allUsers) 
      { 
       //Connect to the root of the active directory domain that this computer is bound to with the default credentials; seems to cover employee and provider OUs at minimum 
       var rootDirectory = new DirectoryEntry(); 

       DirectorySearcher adSearch = new DirectorySearcher(rootDirectory); 

       adSearch.Filter = "(&(objectClass=user)(anr=" + name + "))"; 

       //LIMIT NUMBER OF RESULTS PER USER SEARCHED 
       adSearch.SizeLimit = 20; 

       // Go through all entries from the active directory. 
       foreach (SearchResult adUser in adSearch.FindAll()) 
       { 
        DirectoryEntry de = adUser.GetDirectoryEntry(); 

        string userName = ""; 
        userName = adUser.Properties["sAMAccountName"][0].ToString(); 

        string createdDate = ""; 
        createdDate = adUser.Properties["whenCreated"][0].ToString(); 

        ADUser aduser = new ADUser(userName, createdDate); 

        users.Add(aduser); 
       } 
      } 

      users.Sort((x, y) => DateTime.Parse(y.createdDate).CompareTo(DateTime.Parse(x.createdDate))); 

      json = new JavaScriptSerializer().Serialize(new { users = users }); 

      //return json; 
      HttpContext.Current.Response.Write(json); 
     } 

public class ADUser 
{ 
    public ADUser(string UserName, string CreatedDate) 
    { 
     userName = UserName; 
     createdDate = CreatedDate; 
... 
} 

答えて

0

ここには間違いがあります。

1)全体のファイルとユーザーを取得します。

は、私はあなたが2枚でこの操作をカットする必要があるとします。 2)前にユーザが出現した場合は評論家にループを張ってください。

この問題は、1回の操作でそれを実行し、最初の/最後の20レコードだけをカットしたいという事実に関連している可能性があります。

幸運

PS:あなたはそこにユーザフィルタを置くことができますか?私は、LISTのファイル全体をユーザーがフィルタリングした後に、それを意味しますか?

関連する問題