ユーザーの入力文字列を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;
...
}