2015-08-27 3 views
1

Я использую DirectorySearch для поиска объектов в Active Directory. Я установить VirtualListView свойства возвращать только несколько значений:Получить общее количество результатов поиска для разбитых на страницы DirectorySearcher

using System; 
using System.DirectoryServices; 

namespace Testbed 
{ 
    internal class Testbed 
    { 
     private static void Main() 
     { 
      DoSearch(); 
      Console.ReadKey(); 
     } 

     private static void DoSearch() 
     { 
      var entry = new DirectoryEntry("LDAP://server/DC=mydomain,DC=com", @"USERNAME", "PASSWORD"); 
      var searcher = new DirectorySearcher(entry) 
      { 
       PageSize = 0, 
       SearchScope = SearchScope.Subtree, 
       Filter = "(Description=J_*)", 
       Sort = new SortOption("Description", SortDirection.Ascending), 
       VirtualListView = new DirectoryVirtualListView(0, 9, 1) 
      }; 

      SearchResultCollection results = searcher.FindAll(); 
      foreach (SearchResult result in results) 
      { 
       Console.WriteLine(result.Properties["Description"][0]); 
      } 
      Console.WriteLine("Found: " + results.Count); 
     } 
    } 
} 

Есть ли способ, чтобы получить общее количество объектов в AD для запроса, не делая явную DirectorySearch - «вызов» с по PageSize (например 500)?

+0

Вы хотите 'count' или фактические объекты? – smr5

+0

Вы хотите, чтобы 'count' или фактические объекты? – smr5

+0

Мне просто нужен общий счет. –

ответ

1

Внутри DirectoryVirtualListView находится ApproximateTotal. Вы можете использовать его, но помните, что вы должны получить к нему доступ после блока foreach в своем коде. Просто измените эту строку:

Console.WriteLine("Found: " + results.Count); 

к этому:

Console.WriteLine("Found: " + searcher.VirtualListView.ApproximateTotal); 

Все сделано!