internal ADVirtualListView(IDirectorySession session, ADObjectId rootId, ADObjectId[] addressListIds, SortBy sortBy, int rowsToPrefetch, IEnumerable <PropertyDefinition> properties) : base(session, rootId, QueryScope.SubTree, sortBy) { if (properties == null) { throw new ArgumentNullException("properties"); } if (sortBy == null) { throw new ArgumentNullException("sortBy"); } if (rowsToPrefetch < 1) { throw new ArgumentOutOfRangeException("rowsToPrefetch"); } this.rowsToPrefetch = rowsToPrefetch; QueryFilter[] array; if (addressListIds == null) { array = new QueryFilter[2]; array[0] = new ExistsFilter(ADRecipientSchema.AddressListMembership); } else { array = new QueryFilter[addressListIds.Length + 1]; for (int i = 0; i < addressListIds.Length; i++) { array[i] = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.AddressListMembership, addressListIds[i]); } } array[array.Length - 1] = new ExistsFilter(ADRecipientSchema.DisplayName); QueryFilter queryFilter = new AndFilter(array); QueryFilter queryFilter2 = (addressListIds == null) ? queryFilter : new ExistsFilter(ADObjectSchema.ObjectClass); this.requestedProperties = properties; ADScope readScope = session.GetReadScope(rootId, ADVirtualListView.dummyADRawEntry); ADObject adobject; string[] ldapAttributes; session.GetSchemaAndApplyFilter(ADVirtualListView.dummyADRawEntry, readScope, out adobject, out ldapAttributes, ref queryFilter2, ref properties); base.LdapAttributes = ldapAttributes; this.properties = properties; base.LdapFilter = LdapFilterBuilder.LdapFilterFromQueryFilter((addressListIds == null) ? queryFilter2 : queryFilter, false, base.Session.SessionSettings.PartitionSoftLinkMode, base.Session.SessionSettings.IsTenantScoped); this.vlvRequestControl = new VlvRequestControl(); this.vlvRequestControl.AfterCount = this.rowsToPrefetch; base.DirectoryControls.Add(this.vlvRequestControl); }