0

質問がありますが、解決策が見つかりません:(

Active Directory からデータを取得する ASP.NET アプリケーションがあります。3 層アプリケーションを構築します。ユーザー クラス ("Benutzer.cs") とデータ レイヤーとサービス レイヤーを持つモデル プロジェクトがあります。私のデータレイヤーでは、AD のユーザーに関する情報を取得します。私は今、1人のユーザーだけを取得したいのですが、私の質問は、リストの1人のユーザーをフィルタリングする方法です。ばかげた質問かもしれませんが、何をしなければならないのかわかりません:D

私のコード:

...

                    IUserService srv = new UserService();
                    List<Model.Benutzer> usr = srv.GetUser(Domain, null, null, UserID); 

                        // I want the one User of this List can I found this User about
                        //  Benutzer User = usr.? 

                    ...

ユーザーは 1 人だけです。これは私の getUser メソッドのコードです:

public List<Benutzer> GetUser(string Domain, string Benutzer, string Werk, string GUID)
        {
            List<Benutzer> result = new List<Benutzer>();

                DirectoryEntry Entry = new DirectoryEntry("LDAP://<GUID=" + GUID + ">");

                string filter = "(&(objectClass=user)(objectCategory=person)(cn=*))"; 

                DirectorySearcher Searcher = new DirectorySearcher(Entry, filter);

                   SearchResult res = Searcher.FindOne();

                    result.Add(new Benutzer()
                    {
                        Benutzername = GetProperty(res, "sAMAccountName"),
                        Vorname = GetProperty(res, "givenName"),
                        Nachname = GetProperty(res, "sn"),
                        eMail = GetProperty(res, "mail"),
                        Unternehmen = GetProperty(res, "company"),
                        Abteilung = GetProperty(res, "Department"),
                        Raum = GetProperty(res, "physicalDeliveryOfficeName"),
                        Beschreibung = GetProperty(res, "Description"),
                        Kostenstelle = GetProperty(res, "extensionAttribute3"),
                        Telefonnummer = GetProperty(res, "telephoneNumber"),
                        Mobilnummer = GetProperty(res, "mobile"),
                        Haustelefon = GetProperty(res, "homePhone"),
                        Fax = GetProperty(res, "facsimileTelephoneNumber"),
                        Pager = GetProperty(res, "pager"),
                        Standort = GetProperty(res, "l")
                    });

            return result; 
        }

タラソフ

4

2 に答える 2

1

コードは、リスト内の 1 人のユーザーのみを返す必要があります。DirectorySearcher.FindOne は、最初に見つかったエントリのみを返します。

リストで返さない場合は、戻り値を Benutzer にしてから、結果も Benutzer 型にする必要があります。

public Benutzer GetUser(string Domain, string Benutzer, string Werk, string GUID)
{
    Benutzer result = new Benutzer();
    DirectoryEntry Entry = new DirectoryEntry("LDAP://<GUID=" + GUID + ">");
    string filter = "(&(objectClass=user)(objectCategory=person)(cn=*))";

    DirectorySearcher Searcher = new DirectorySearcher(Entry, filter);
    SearchResult res = Searcher.FindOne();
    result =new Benutzer()
    {
        Benutzername = GetProperty(res, "sAMAccountName"),
        Vorname = GetProperty(res, "givenName"),
        Nachname = GetProperty(res, "sn"),
        eMail = GetProperty(res, "mail"),
        Unternehmen = GetProperty(res, "company"),
        Abteilung = GetProperty(res, "Department"),
        Raum = GetProperty(res, "physicalDeliveryOfficeName"),
        Beschreibung = GetProperty(res, "Description"),
        Kostenstelle = GetProperty(res, "extensionAttribute3"),
        Telefonnummer = GetProperty(res, "telephoneNumber"),
        Mobilnummer = GetProperty(res, "mobile"),
        Haustelefon = GetProperty(res, "homePhone"),
        Fax = GetProperty(res, "facsimileTelephoneNumber"),
        Pager = GetProperty(res, "pager"),
        Standort = GetProperty(res, "l")
    };              

    return result;  
}
于 2012-07-26T13:59:08.493 に答える
1

GetUser1 人のユーザーのみを対象としている場合は、リストではなく単一のユーザー インスタンスを返すようにメソッドを更新します。

public Benutzer GetUser(...)
{
    ....
    return new Benutzer(...);
}

メソッドを制御できずGetUser、返されたリストからユーザーを抽出したいだけの場合は、次を呼び出します。

srv.GetUser(Domain, null, null, UserID).FirstOrDefault();
于 2012-07-26T13:53:02.053 に答える