gpt4 book ai didi

c# - 如何从 Asp .Net 中的 Active Directory 获取不同的部门名称?

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:50 25 4
gpt4 key购买 nike

我想从 AD 获取唯一或不同的部门名称,那么正确的查询是什么。下面是我的代码:

private static DomainController GetDomainController(string domainpath)
{
var domainContext = new DirectoryContext(DirectoryContextType.Domain, domainpath);
var domain = Domain.GetDomain(domainContext);
var controller = domain.FindDomainController();
return controller;
}

private static MyMethod()
{
var domainController = GetDomainController(ActiveDirectorySettings.DomainPath);

// Lookup the information in AD
var ldapEntry = new DirectoryEntry(string.Format("LDAP://{0}", domainController)) { AuthenticationType = AuthenticationTypes.Secure | AuthenticationTypes.FastBind };
DirectorySearcher ds;

ds = new DirectorySearcher(ldapEntry)
{
SearchScope = SearchScope.Subtree,
Filter = "(&" + "(objectClass=user)" + "(department=" + departmentname + "*))"
};

ds.PropertiesToLoad.Add("department");
if (ds.FindAll().Count >= 1)
{
//do something....
}
}

在这里,我获取了所有部门的名称,包括重复名称。但我想要的是 -

如果 3 个用户属于同一部门 (X),那么我希望部门 (X) 一次,而不是三次。

最佳答案

您可以使用 LINQ 获得唯一/不同的搜索结果。这是代码片段:

if (ds.FindAll().Count >= 1)
{
var overallSearchResult = ds.FindAll();
//to apply distinct on path property of elements in the collection
var uniqueSearchResultsForPath = overallSearchResult.Cast<System.DirectoryServices.SearchResult>().Select(x => x.Path).Distinct();

//To apply distinct on any specific property in the "Properties" property of the elements in the collection
//this will give you list of distinct departments for example

var uniqueSearchResultsForDepartment = overallSearchResult.Cast<System.DirectoryServices.SearchResult>().Select(x => x.Properties["department"][0]).Distinct();
}

您必须在编写此代码的 C# 文件中包含 using System.Linq; 命名空间。

关于c# - 如何从 Asp .Net 中的 Active Directory 获取不同的部门名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44585939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com