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