private IQueryable <Category> GetUnorderedCategories(RockContext rockContext = null)
        {
            rockContext = rockContext ?? new RockContext();

            string selectedValue = rFilter.GetUserPreference("EntityType");

            var attributeEntityTypeId = EntityTypeCache.Read(typeof(Rock.Model.Attribute)).Id;
            var queryable             = new CategoryService(rockContext).Queryable()
                                        .Where(c =>
                                               c.EntityTypeId == attributeEntityTypeId &&
                                               c.EntityTypeQualifierColumn == "EntityTypeId");

            if (!string.IsNullOrWhiteSpace(selectedValue))
            {
                if (selectedValue == "0")
                {
                    queryable = queryable.Where(c => c.EntityTypeQualifierValue == null);
                }
                else
                {
                    queryable = queryable.Where(c => c.EntityTypeQualifierValue == selectedValue);
                }
            }
            else
            {
                // Exclude the categories for block and service job attributes, since they are controlled through code attribute decorations
                var exclusions = new List <Guid>();
                exclusions.Add(Rock.SystemGuid.EntityType.BLOCK.AsGuid());
                exclusions.Add(Rock.SystemGuid.EntityType.SERVICE_JOB.AsGuid());

                var entities = new EntityTypeService(rockContext).GetEntities()
                               .Where(t => !exclusions.Contains(t.Guid))
                               .Select(e => e.Id)
                               .ToList()
                               .Select(e => e.ToString())
                               .ToList();

                queryable = queryable.Where(c => entities.Contains(c.EntityTypeQualifierValue));
            }

            return(queryable);
        }
        private IQueryable <Category> GetUnorderedCategories(int?entityTypeId, RockContext rockContext = null)
        {
            rockContext = rockContext ?? new RockContext();

            var attributeEntityTypeId = EntityTypeCache.Read(typeof(Rock.Model.Attribute)).Id;
            var queryable             = new CategoryService(rockContext).Queryable()
                                        .Where(c =>
                                               c.EntityTypeId == attributeEntityTypeId &&
                                               c.EntityTypeQualifierColumn == "EntityTypeId");

            if (entityTypeId.HasValue)
            {
                var stringValue = entityTypeId.Value.ToString();
                queryable = queryable.Where(c =>
                                            (entityTypeId.Value == 0 && c.EntityTypeQualifierValue == null) ||
                                            (entityTypeId.Value != 0 && c.EntityTypeQualifierValue != null && c.EntityTypeQualifierValue == stringValue));
            }
            else
            {
                // Exclude the categories for block and service job attributes, since they are controlled through code attribute decorations
                var exclusions = new List <Guid>();
                exclusions.Add(Rock.SystemGuid.EntityType.BLOCK.AsGuid());
                exclusions.Add(Rock.SystemGuid.EntityType.SERVICE_JOB.AsGuid());

                var entities = new EntityTypeService(rockContext).GetEntities()
                               .Where(t => !exclusions.Contains(t.Guid))
                               .Select(e => e.Id)
                               .ToList()
                               .Select(e => e.ToString())
                               .ToList();

                queryable = queryable.Where(c =>
                                            c.EntityTypeQualifierValue == null ||
                                            entities.Contains(c.EntityTypeQualifierValue));
            }

            return(queryable);
        }