/// <summary> /// Filters the query. /// </summary> /// <param name="query">The query.</param> /// <param name="request">The request.</param> /// <param name="hasnotSeoDisjunction">The has seo disjunction.</param> /// <returns> /// Query, filtered with specified filter parameters /// </returns> protected override NHibernate.IQueryOver<PagesView, PagesView> FilterQuery(NHibernate.IQueryOver<PagesView, PagesView> query, PagesFilter request, Junction hasnotSeoDisjunction) { query = base.FilterQuery(query, request, hasnotSeoDisjunction); var filter = request as UntranslatedPagesFilter; if (filter != null) { PageProperties alias = null; // Exclude from results if (filter.ExistingItemsArray.Any()) { query = query.Where(Restrictions.Not(Restrictions.In(Projections.Property(() => alias.Id), filter.ExistingItemsArray))); } // Excluded language id if (filter.ExcludedLanguageId.HasValue) { var languageProxy = repository.AsProxy<Language>(filter.ExcludedLanguageId.Value); query = query.Where(() => (alias.Language != languageProxy || alias.Language == null)); } if (filter.ExcplicitlyIncludedPagesArray.Any()) { // Include to results explicitly included or untranslated query = query.Where(Restrictions.Disjunction() .Add(Restrictions.In(Projections.Property(() => alias.Id), filter.ExcplicitlyIncludedPagesArray)) .Add(Restrictions.IsNull(Projections.Property(() => alias.LanguageGroupIdentifier)))); } else { // Only untranslated query = query.Where(Restrictions.IsNull(Projections.Property(() => alias.LanguageGroupIdentifier))); } } return query; }