/// <summary> /// Binds the grid. /// </summary> private void BindGrid() { var rockContext = new RockContext(); var recordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_BUSINESS.AsGuid() ).Id; var activeRecordStatusValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE.AsGuid() ).Id; int? businessRoleId = new GroupTypeRoleService( rockContext ).Queryable() .Where( r => r.Guid.Equals( new Guid( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS ) ) ) .Select( r => r.Id ) .FirstOrDefault(); var queryable = new PersonService( rockContext ).Queryable() .Where( q => q.RecordTypeValueId == recordTypeValueId && q.RecordStatusValueId == activeRecordStatusValueId ); // Business Name Filter var businessName = gfBusinessFilter.GetUserPreference( "Business Name" ); if ( !string.IsNullOrWhiteSpace( businessName ) ) { queryable = queryable.Where( a => a.FirstName.Contains( businessName ) ); } // Owner Filter int ownerId = 0; if ( int.TryParse( gfBusinessFilter.GetUserPreference( "Owner" ), out ownerId ) && ownerId != 0 ) { var members = queryable.SelectMany( a => a.Members ).ToList(); foreach ( var member in members ) { if ( member.GroupRoleId == businessRoleId ) { var groupMemberService = new GroupMemberService( rockContext ); var owner = groupMemberService.GetInverseRelationship( member, false, CurrentPersonAlias ); if ( owner.PersonId != ownerId ) { queryable = queryable.Where( a => a.Id != member.PersonId ); } } } } SortProperty sortProperty = gBusinessList.SortProperty; if ( sortProperty != null ) { gBusinessList.DataSource = queryable.Sort( sortProperty ).ToList(); } else { gBusinessList.DataSource = queryable.OrderBy( q => q.FirstName ).ToList(); } gBusinessList.DataBind(); }