0

我想从 Active Directory 中获取 Departmentlist,为此我使用 Directoryentry 和 DirectorySearcher 类。我得到了部门列表,但是如何删除这个列表中的双值。

例如我现在的清单:

it
it
it
vg
per
vg
...

我只想要列表中的其中一个值:

it
vg
per
...(other departments)

我想将此列表用于 dropDownlist 列表。

我的代码:

public static void GetAllDepartments(string domaincontroller) 
        {
            ArrayList list = new ArrayList();

            int Counter = 0;

            string filter = "(&(objectClass=user)(objectCategory=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(sn=*)(|(telephoneNumber=*)(mail=*))(cn=*)(l=*))";

            List<User> result = new List<User>();

            DirectoryEntry Entry = new DirectoryEntry(domaincontroller);

            DirectorySearcher Searcher = new DirectorySearcher(Entry, filter);

            foreach (SearchResult usr in Searcher.FindAll())
            {
                result.Add(new User()
                {
                    department = GetLdapProperty(usr, "Department")

                });

                Counter++;
            }

            for (int i = 0; i < Counter; i++)
            {

                list.Add(result[i].department);

            }
        }

如何在 Arraylist 中只显示一个值?

4

5 回答 5

2

首先,我建议不要使用 ArrayList,而是使用强类型列表
然后,使用该Distinct()方法仅获取唯一值列表(无重复值)。

例如:

List<String> list = new List();

....

 for (int i = 0; i < Counter; i++)
 {
     list.Add(result[i].department.ToString());
 }

 var noDuplicates = list.Distinct();
于 2013-02-28T08:36:03.727 回答
1

尝试Distinct()扩展System.Linq

list = list.Distinct();
于 2013-02-28T08:36:11.780 回答
0

使用Enumerable.Distinct Method方法。

于 2013-02-28T08:37:59.397 回答
0

您还可以使用Exists子句查看该元素是否已存在于列表中。

using System.Linq;

for (int i = 0; i < Counter; i++)
{
   bool deptExists = list.Exists(ele => ele == result[i].department);

   if(!deptExists){
    list.Add(result[i].department);
   }
}
于 2013-02-28T08:42:51.177 回答
0

使用 HashSet 并仅插入不重复的值。

HashSet<string> list = new HashSet<string>();

...

for (int i = 0; i < Counter; i++)
{
   string dep = result[i].department.ToString();

   // true if dep was added, false if not. No exception at this point.
   list.Add(dep);
}
于 2013-02-28T08:43:09.547 回答