我如何只获得一个列表的一个用户

时间:2012-07-26 13:49:07

标签: c# asp.net

我有一个问题,我找不到解决方案:(

我有一个从Active Directory获取数据的ASP.NEt应用程序。我构建了一个3层应用程序。我有一个模型项目,有一个用户类(“Benutzer.cs”)和一个数据层和服务层。 在我的数据层中,我获得了AD中用户的信息。我现在想要只有一个用户,我的问题是如何过滤一个列表的用户。也许是一个愚蠢的问题,但我不知道我必须做什么: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.? 

                    ...

我只想要一个用户。这是我的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; 
        }

塔拉索夫

2 个答案:

答案 0 :(得分:1)

如果您只是在一个用户之后,那么更新您的GetUser方法以返回单个用户实例而不是列表:

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

如果您无法控制GetUser方法,只想从返回的列表中提取用户,请致电:

srv.GetUser(Domain, null, null, UserID).FirstOrDefault();

答案 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;  
}