Model view controller LDAP DirectorySearcher.sort未设置值的丢失记录

Model view controller LDAP DirectorySearcher.sort未设置值的丢失记录,model-view-controller,active-directory,ldap,Model View Controller,Active Directory,Ldap,当查询我们的AD时,我们在初始查询samaccounttype=805306368上得到一个完整的结果集。如果我们尝试在一个字段上对查询进行排序,该字段的值可以是givenname,那么它将只返回带有值集的记录,并跳过没有值的记录。我们已尝试使用下面的状态标志来包含这两个集合,但在排序时仍会丢失未设置的值: (|(&(samaccounttype=805306368)(givenName=*))(&(samaccounttype=805306368)(!givenname=*))

当查询我们的AD时,我们在初始查询samaccounttype=805306368上得到一个完整的结果集。如果我们尝试在一个字段上对查询进行排序,该字段的值可以是givenname,那么它将只返回带有值集的记录,并跳过没有值的记录。我们已尝试使用下面的状态标志来包含这两个集合,但在排序时仍会丢失未设置的值:

(|(&(samaccounttype=805306368)(givenName=*))(&(samaccounttype=805306368)(!givenname=*)))
不确定这是否与VirtualListView如何处理结果集有关,或者是否存在其他问题。以前有没有人遇到过这个问题,对我遗漏的东西有什么建议?下面是ds.virtuallistview排序的代码片段

using (var ds = new DirectorySearcher(de))
            {
                ds.Filter = Filter;

                foreach (var p in Properties)
                {
                    ds.PropertiesToLoad.Add(p.LDAPName);
                }

                //get record count
                ds.PropertyNamesOnly = false;
                ds.Sort = new SortOption(this.Properties.PrimaryOrderBy.LDAPName, SortDirection.Ascending); //ldap must always return ascending so we can custom sort
                ds.VirtualListView = new DirectoryVirtualListView(0, 0, 0);
                foreach(SearchResult s in ds.FindAll()){ /*must enumerate the collection before calling approximate total*/ }
                Records = ds.VirtualListView.ApproximateTotal;
                results = ds.FindAll();
                //Records = results.Count;
            }

下面是DirectorySearcher的示例代码,它在givenName上对结果进行排序

您可以在下面的结果中看到,没有为user1用户设置givenName,但是该对象出现在列表末尾的结果中。我不使用VirtualListView

如果我添加以下行:

dsLookFor.VirtualListView=新目录VirtualListView 1,0,2

结果是:

LDAP://WM2008R2ENT:389/CN=user0 users,OU=MonOu,DC=dom,DC=fr
        givenname : user0
        telephonenumber : 88
        adspath : LDAP://WM2008R2ENT:389/CN=user0 users,OU=MonOu,DC=dom,DC=fr
        cn : user0 users
LDAP://WM2008R2ENT:389/CN=user2 users,OU=MonOu,DC=dom,DC=fr
        givenname : user2
        telephonenumber : 55
        adspath : LDAP://WM2008R2ENT:389/CN=user2 users,OU=MonOu,DC=dom,DC=fr
        cn : user2 users

缺少没有给定名称的结果。

以下是DirectorySearcher的示例代码,它在给定名称上对结果进行排序

您可以在下面的结果中看到,没有为user1用户设置givenName,但是该对象出现在列表末尾的结果中。我不使用VirtualListView

如果我添加以下行:

dsLookFor.VirtualListView=新目录VirtualListView 1,0,2

结果是:

LDAP://WM2008R2ENT:389/CN=user0 users,OU=MonOu,DC=dom,DC=fr
        givenname : user0
        telephonenumber : 88
        adspath : LDAP://WM2008R2ENT:389/CN=user0 users,OU=MonOu,DC=dom,DC=fr
        cn : user0 users
LDAP://WM2008R2ENT:389/CN=user2 users,OU=MonOu,DC=dom,DC=fr
        givenname : user2
        telephonenumber : 55
        adspath : LDAP://WM2008R2ENT:389/CN=user2 users,OU=MonOu,DC=dom,DC=fr
        cn : user2 users
缺少未指定名称的结果

LDAP://WM2008R2ENT:389/CN=user0 users,OU=MonOu,DC=dom,DC=fr
        givenname : user0
        telephonenumber : 88
        adspath : LDAP://WM2008R2ENT:389/CN=user0 users,OU=MonOu,DC=dom,DC=fr
        cn : user0 users
LDAP://WM2008R2ENT:389/CN=user2 users,OU=MonOu,DC=dom,DC=fr
        givenname : user2
        telephonenumber : 55
        adspath : LDAP://WM2008R2ENT:389/CN=user2 users,OU=MonOu,DC=dom,DC=fr
        cn : user2 users