2016-08-04 6 views
0

IDを持つリストなどを使用して、広告から情報を取得する必要があります。次のコードは値をリストし、それに接続されているもの(名前、メール、組織など)を書き留めて別のリストに保存する必要があります。ここ は、私がこれまでに書かれたものです:ID(Active Directoryからの名前などなど)の値をリストに渡し、別のリスト(C#)に保存するにはどうすればよいですか?

static void Main(string[] args) 
    { 
     PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, null); 
     UserPrincipal user = new UserPrincipal(domainContext); 
     List<string>id = new List<string>(); 
     id.Add("someid"); 
     id.Add("someid"); 
     id.Add("someid"); 
     user.Name = id[2]; 
     Console.ReadLine(); 
     PrincipalSearcher pS = new PrincipalSearcher(); 
     pS.QueryFilter = user; 
     PrincipalSearchResult<Principal> results = pS.FindAll(); 
     Principal pc = results.ToList()[0]; 
     DirectoryEntry de = (DirectoryEntry)pc.GetUnderlyingObject(); 
     var userData = new Data(); 
     userData.ID = de.Properties["samAccountName"].Value.ToString(); 
     userData.name = de.Properties["givenName"].Value.ToString(); 
     userData.lastName = de.Properties["sn"].Value.ToString(); 
     userData.mail = de.Properties["mail"].Value.ToString(); 
     userData.organization = de.Properties["extensionAttribute2"].Value.ToString(); 
     List<Data> d = new List<Data>(); 
     d.Add(userData); 

とクラスデータ:

public class Data 
    { 

     public string name { get; set; } 
     public string lastName { get; set; } 
     public string mail { get; set; } 
     public string ID { get; set; } 
     public string organization { get; set; } 
     //public Data() { } 
    } 
} 

私は本当に解決策を考え出すことができない - の値を渡す方法と、それらを保存します。

+0

既存のコードは、Active Directoryから必要なものを得るために機能しますか?あなたが別のリストに合格すると、それはすでにあなたのList of Dataオブジェクトで行っているようです。どこに値を渡す必要がありますか? –

+0

ADから実際にデータを読み込めますか?はいの場合は、正確にどこにデータを保存しようとしていますか? AD自体または何を更新しようとしていますか? – uTeisT

+0

こんにちは、コードは1つのID(userName = "idnumber"と書かれた場合はexmple、foreachループの場合は正しく動作します)。問題は、リスト内の3つまたは4つのIDについて同じことを行う方法がわからないことです。結局、値は別のリスト(私の例ではd)に渡され、保存されなければなりません。 – Kuba

答えて

0

まあ、私は問題を正しく得たと思う。

 List<string> idList = new List<string>(); 
     idList.Add("someid"); 
     idList.Add("someid"); 
     idList.Add("someid"); 
     List<Data> d = new List<Data>(); 
     foreach (string id in idList) 
     { 
      user.Name = id; 
      PrincipalSearcher pS = new PrincipalSearcher(); 
      pS.QueryFilter = user; 
      PrincipalSearchResult<Principal> results = pS.FindAll(); 
      Principal pc = results.ToList()[0]; 
      DirectoryEntry de = (DirectoryEntry)pc.GetUnderlyingObject(); 
      var userData = new Data(); 
      userData.ID = de.Properties["samAccountName"].Value.ToString(); 
      userData.name = de.Properties["givenName"].Value.ToString(); 
      userData.lastName = de.Properties["sn"].Value.ToString(); 
      userData.mail = de.Properties["mail"].Value.ToString(); 
      userData.organization = de.Properties["extensionAttribute2"].Value.ToString(); 
      d.Add(userData); 
     } 

基本的に、あなただけのループをあなたの-to内のすべてのidを通じてcreated- idListになり、割り当て:あなたのコードは、1人のユーザーに対して適切に動作し、ここではリストに他のユーザを追加する必要がありまし考慮 は何が必要です各idをuser.Nameに追加して、通常のADを行い、最後に各userDataをデータリストに追加します。

+0

[OK]を解決する方法は、 'public static List listConvert(ListList idList)'を作成し、ループの直後にdを返します。 – Kuba

+0

それは私の提案とはどのように異なっているのですか? 私の答えでは、結局、あなたが必要とするすべてのデータを含むリスト 'd'を持っています。 – uTeisT

+0

それは違いはありません、あなたはメソッドにそのコードを入れなければなりません。それだけです。しかし、それを理解し、正しい方法で動作させるにはしばらく時間がかかりました。とにかく、あなたのhelp @uteistに感謝します! – Kuba

関連する問題