2011-10-02 64 views
0

如何限制通過System.DirectoryServices在LDAP查詢中返回的屬性?限制在LDAP查詢中返回的屬性

我一直在使用DirectorySearcher並添加了我想要的屬性DirectorySearcher.PropertiesToLoad。問題是這只是確保添加的屬性包含在DirectoryEntry.Properties以及一些默認列表中。有什麼辦法可以指定你想要返回的唯一屬性嗎?

DirectoryEntry base = new DiectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind); 
DirectorySearcher groupSearcher = new DirectorySearcher(base); 
groupSearcher.Filter = "(objectClass=group)"; 
groupSearcher.PropertiesToLoad.Add("distinguishedName"); 
groupSearcher.PropertiesToLoad.Add("description"); 
foreach (SearchResult groupSr in groupDs.FindAll()) 
... 

裏面的foreach循環,當我拿到小組第一的DirectoryEntry有,我可以訪問不只是我指定的兩個約16個不同的屬性(distinguishedName來,說明)

回答

2

你有限制的東西是將可用的屬性/填寫您的SearchResult對象 - 您可以直接訪問您foreach循環:

DirectoryEntry baseEntry = new DirectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind); 

DirectorySearcher groupSearcher = new DirectorySearcher(baseEntry); 
groupSearcher.Filter = "(objectClass=group)"; 

groupSearcher.PropertiesToLoad.Add("distinguishedName"); 
groupSearcher.PropertiesToLoad.Add("description"); 

foreach (SearchResult groupSr in groupSearcher.FindAll()) 
{ 
    if(groupSr.Properties["description"] != null && groupSr.Properties["description"].Count > 0) 
    { 
     string description = groupSr.Properties["description"][0].ToString(); 
    } 

    ..... 
} 

你不能限制對實際屬性- 因此,如果您爲每個SearchResult抓取目錄條目 - 您可以完全訪問所有內容。但整個的一點是,你可以定義你所需要的性能,並在SearchResult直接訪問這些沒有不必返回到底層DirectoryEntry