Ответ ScottCher работает, но у него есть ограничения, в частности, вы не можете справиться с лимитом 1000 записей. Чтобы сделать это, способ only состоит в том, чтобы использовать объект Command, и поверьте мне, это минное поле, потому что (а) нет хорошей документации по интерфейсам C #, и (б) невероятно нет полное решение, которое можно найти в Google на момент написания этой статьи.
Я потратил на это последние несколько дней, и у меня есть кое-что, что я хотел бы передать всем источникам, которые я прочитал, с различными частями головоломки.
Во-первых, как отмечалось во многих местах (к сожалению, только с примерами на VB!), Если вы не делаете что-то особенное, все запросы ADSI ограничиваются 1000 строками результатов. Ключом к тому, чтобы избежать этого, является установка свойства «Размер страницы» для объекта Command. Мы вернемся к этому через секунду, но сначала нам нужно, чтобы базовый запрос работал с помощью команды. Если вы используете оригинальный код в этой теме, вы получите исключение для cmd.Execute с жалобами на несоответствие параметров. Вы могли бы подумать, что достаточно передать значение null в качестве объекта ref, тем более что синтаксис LDAP (по-видимому) не имеет параметров.
Я нашел ответ на это в двух местах. Во-первых, даже если вы явно не указываете параметры, может показаться, что «:» в синтаксисе SQL LDAP достаточно, чтобы заставить ADO думать, что параметры являются обязательными. Странно, но, казалось бы, правда. Во-вторых, ПРАВИЛЬНЫЙ способ указать регистр «без параметров» - установить значение Type.Missing, а не null, как в:
object parms = Type.Missing;
Это был ключ к выполнению Execute, чтобы не выдавать исключение.
Теперь с работающей Командой мы можем обратиться к пределу в 1000 строк. Это «просто», указав свойство «Размер страницы» в команде, но, как видно из интерфейса C #, это не то же самое, что свойство C #. Вам нужно поместить его в коллекцию Properties, но это не предоставляет хороший интерфейс коллекции, чтобы сделать это с. После некоторых проб и ошибок правильный синтаксис:
cmd.Properties["Page Size"].Value = 500;
Я не думаю, что важно точно, какой размер страницы (все еще играет с этим), но установка его на что-то достаточно, чтобы ADSI получил все результаты. И я искренне надеюсь, что это кому-нибудь поможет.