2012-09-26 34 views
1

我正在嘗試圍繞LINQ打包頭,因此我可以弄清楚如何查詢DirectoryEntry。目前,我正在嘗試在C#中編寫一些代碼,該代碼將接收一個字符串變量,並根據此字符串給出一個組中的成員列表。使用DirectoryEntry獲取本地組中的所有用戶LINQ C#

下面是我設法弄清楚迄今爲止

public static string[] GetAllUsersInGroup(string groupname) 
{ 
    var names = new List<string>(); 
    var path = string.Format("WinNT://{0},computer", Environment.MachineName); 
    var computerEntry = new DirectoryEntry(path); 

    if (computerEntry != null) 
    { 
     using (computerEntry) 
     { 
      var menberNames = from DirectoryEntry childEntry 
           in computerEntry.Children.Find("testgroup", "group") 
           where childEntry.SchemaClassName == "User" 
           select childEntry.Name; 

      foreach (var name in memberNames) 
      { 
       names.Add(name); 
      } 
     } 
    } 

    return names.ToArray(); 
} 

這樣做的問題是,我不能在那裏語句中使用Children.Find()

雖然我想知道如何正確地做到這一點,但我真的很想弄清楚這一點,因爲我還需要做其他的查詢。所以,如果有人知道任何良好的來源,找到這個信息,請讓我知道

+3

這裏有什麼問題?什麼不起作用? –

+0

@PaulAlanTaylor我不能使用Children.Find()是哪裏,因爲它不是布爾即如果我有東西我在哪兒childEntry.SchemaClassName ==「用戶」這將工作返回計算機中的所有用戶 –

回答

1

我不太確定這一點。試試它是否適合你。

public static string[] GetAllUsersInGroup(string groupname) 
{ 
    var path = string.Format("WinNT://{0},computer", Environment.MachineName); 

    using (var computerEntry = new DirectoryEntry(path)) 
    { 
     if (computerEntry != null) 
     { 
      return 
       computerEntry.Children.SelectMany(childEntry => 
        ChildEntry.Children.Find("Administrators", "group") 
         .Children.Select(child => child.Name)) 
        .ToArray(); 
     } 
     else 
     { 
      return null; 
     } 
    } 
} 
+0

這看起來像它會工作,但我很樂意使用LINQ –

+1

你不能做這個更多的LINQy沒有失去安全 –

+1

SelectMany不是兒童的屬性 –

相關問題