Example #1
0
        public static IQueryable <TModel> ApplyTagsFilter <TModel>(this IQueryable <TModel> query, IFilterByTags tagsFilter,
                                                                   Func <string, Expression <Func <TModel, bool> > > filterByTagName)
        {
            if (tagsFilter.FilterByTags != null && tagsFilter.FilterByTags.Any(tag => !string.IsNullOrWhiteSpace(tag)))
            {
                var predicate = (tagsFilter.FilterByTagsConnector == FilterConnector.Or)
                    ? PredicateBuilder.False <TModel>()
                    : PredicateBuilder.True <TModel>();

                foreach (var tagName in tagsFilter.FilterByTags)
                {
                    if (!string.IsNullOrWhiteSpace(tagName))
                    {
                        Expression <Func <TModel, bool> > whereClause = filterByTagName(tagName);
                        if (tagsFilter.FilterByTagsConnector == FilterConnector.Or)
                        {
                            predicate = predicate.Or(whereClause);
                        }
                        else
                        {
                            predicate = predicate.And(whereClause);
                        }
                    }
                }

                query = query.Where(predicate);
            }

            return(query);
        }
        public static IQueryable <TModel> ApplySitemapTagsFilter <TModel>(this IQueryable <TModel> query, IFilterByTags tagsFilter)
            where TModel : Sitemap
        {
            if (tagsFilter != null && tagsFilter.FilterByTags != null)
            {
                var tags = tagsFilter.FilterByTags.Where(tag => !string.IsNullOrWhiteSpace(tag)).Distinct().ToArray();

                if (tags.Length > 0)
                {
                    if (tagsFilter.FilterByTagsConnector == FilterConnector.And)
                    {
                        query = query.Where(page => page.SitemapTags.Count(pageTag => tags.Contains(pageTag.Tag.Name) && !pageTag.IsDeleted && !pageTag.Tag.IsDeleted) == tags.Length);
                    }
                    else
                    {
                        query = query.Where(page => page.SitemapTags.Any(pageTag => tags.Contains(pageTag.Tag.Name) && !pageTag.IsDeleted && !pageTag.Tag.IsDeleted));
                    }
                }
            }

            return(query);
        }