2013-02-28 3 views
0

Active Directory에서 Directoryentry 및 DirectorySearcher 클래스를 사용하여 Departmentlist를 가져오고 싶습니다. 부서 목록을 얻지 만이 목록에서 이중 값을 어떻게 삭제할 수 있습니까?어떻게 이중 값이 아닌 Arraylist를 얻습니까?

지금 예를 들면 내 목록

:

it 
it 
it 
vg 
per 
vg 
... 

그리고 나는 단 하나,이 방법 목록에서이 값을 원하는 :

it 
vg 
per 
...(other departments) 

나는 드롭 다운리스트 목록이 목록을 사용하고 싶습니다.

내 코드 :

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의에 하나 개의 값을 표시 할 수 있습니까?

+0

또는 LINQ - Distinct() 값을 사용할 수 있습니다. – Ryba

+0

왜 'ArrayList'를 사용하고 있습니까? –

답변

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); 
    } 
} 
2

우선 ArrayList를 사용하는 대신 Strongly-Typed list을 사용하는 것이 좋습니다.
그런 다음 Distinct() 메서드를 사용하여 고유 값 목록 만 가져옵니다 (중복 없음). 예를 들어

:

List<String> list = new List(); 

.... 

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

var noDuplicates = list.Distinct(); 
+0

작동하지 않지만 오류가 발생하지 않습니다. ( – Tarasov

+0

* 작동하지 않습니다. *? – Blachshma

1

System.Linq 확장에 Distinct()을 시도해보십시오

list = list.Distinct(); 
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); 
} 
+1

HashSet에 항목을 추가하기 전에 항목이 존재하지 않는지 확인할 필요가 없습니다. –

+0

@MatthewWatson 예 맞아, 고마워. – Matten

관련 문제