Проблема запроса Active Directory для электронной почты, когда пользователь не имеет ни одного - PullRequest
0 голосов
/ 07 сентября 2011

Я запрашиваю нашу Active Directory с помощью следующего кода:

            using (DirectorySearcher search = new DirectorySearcher(de))
            {
                search.PropertiesToLoad.Add("cn");
                search.PropertiesToLoad.Add("employeeid");
                search.PropertiesToLoad.Add("employeenumber");
                search.PropertiesToLoad.Add("distinguishedname");
                search.PropertiesToLoad.Add("mail");
                search.Filter = @"(&(objectClass=user)(employeeid=*)(employeenumber=*))";
                search.PageSize = 3000;

                SearchResultCollection src = search.FindAll();
                foreach (SearchResult rec in src)
                {
                    yield return new ADUser()
                    {
                        Name = rec.Properties["cn"][0].ToString(),
                        Path = rec.Properties["distinguishedname"][0].ToString(),
                        Acctno = rec.Properties["employeeid"][0].ToString(),
                        Personno = rec.Properties["employeenumber"][0].ToString(),
                        Email = rec.Properties["mail"][0].ToString()
                    };
                }

            }

Как вы можете видеть, я пытаюсь преобразовать результаты в список ADnser IEnumerable (мой собственный класс определяется следующим образом):

    public class ADUser
    {
        public string Name { get; set; }
        public string Path { get; set; }
        public string Acctno { get; set; }
        public string Personno { get; set; }
        public string Email { get; set; }
    }

Однако мой код вылетает каждый раз, когда я нажимаю на пользователя, у которого нет записи электронной почты.Кажется, что SearchResult не содержит свойства для почты, когда у пользователя нет электронной почты.Есть ли способ получить результат для возврата свойства с нулевым или пустым значением вместо этого?

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

Редактировать после комментария:

if (rec.Properties.Contains("mail") && rec.Properties["mail"] != null)
{
  Email = rec.Properties["mail"][0].ToString()
}
else
{
   Email = "No mail"; # or Email = ""; if you want no text returned 

}
0 голосов
/ 07 сентября 2011

Вы должны быть в состоянии использовать ??оператор «null coalescing» со строкой электронной почты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...