public virtual PagesGridViewModel <SiteSettingPageViewModel> Execute(PagesFilter request) { return(pageListService.GetFilteredPagesList(request)); }
protected virtual IQueryOver <PagesView, PagesView> FilterQuery(IQueryOver <PagesView, PagesView> query, PagesFilter request, Junction hasnotSeoDisjunction) { PageProperties alias = null; if (!request.IncludeArchived) { query = query.Where(() => !alias.IsArchived); } if (request.OnlyMasterPages) { query = query.Where(() => alias.IsMasterPage); } else if (!request.IncludeMasterPages) { query = query.Where(() => !alias.IsMasterPage); } if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query.Where(Restrictions.Disjunction() .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.Title), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaTitle), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaDescription), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaKeywords), searchQuery))); } if (request.CategoryId.HasValue) { query = query.Where(Restrictions.Eq(Projections.Property(() => alias.Category.Id), request.CategoryId.Value)); } if (request.LanguageId.HasValue) { if (request.LanguageId.Value.HasDefaultValue()) { query = query.Where(Restrictions.IsNull(Projections.Property(() => alias.Language.Id))); } else { query = query.Where(Restrictions.Eq(Projections.Property(() => alias.Language.Id), request.LanguageId.Value)); } } if (request.Tags != null) { foreach (var tagKeyValue in request.Tags) { var id = tagKeyValue.Key.ToGuidOrDefault(); query = query.WithSubquery.WhereExists(QueryOver.Of <PageTag>().Where(tag => tag.Tag.Id == id && tag.Page.Id == alias.Id).Select(tag => 1)); } } if (request.Status.HasValue) { if (request.Status.Value == PageStatusFilterType.OnlyPublished) { query = query.Where(() => alias.Status == PageStatus.Published); } else if (request.Status.Value == PageStatusFilterType.OnlyUnpublished) { query = query.Where(() => alias.Status != PageStatus.Published); } else if (request.Status.Value == PageStatusFilterType.ContainingUnpublishedContents) { const ContentStatus draft = ContentStatus.Draft; Root.Models.Content contentAlias = null; var subQuery = QueryOver.Of <PageContent>() .JoinAlias(p => p.Content, () => contentAlias) .Where(pageContent => pageContent.Page.Id == alias.Id) .And(() => contentAlias.Status == draft) .And(() => !contentAlias.IsDeleted) .Select(pageContent => 1); query = query.WithSubquery.WhereExists(subQuery); } } if (request.SeoStatus.HasValue) { if (request.SeoStatus.Value == SeoStatusFilterType.HasNotSeo) { query = query.Where(hasnotSeoDisjunction); } else { query = query.Where(Restrictions.Not(hasnotSeoDisjunction)); } } if (!string.IsNullOrWhiteSpace(request.Layout)) { Guid id; var length = request.Layout.Length - 2; if (request.Layout.StartsWith("m-") && Guid.TryParse(request.Layout.Substring(2, length), out id)) { query = query.Where(() => alias.MasterPage.Id == id); } if (request.Layout.StartsWith("l-") && Guid.TryParse(request.Layout.Substring(2, length), out id)) { query = query.Where(() => alias.Layout.Id == id); } } if (request.ContentId.HasValue) { Root.Models.Content contentAlias = null; ChildContent childContentAlias = null; HtmlContent htmlContentAlias = null; PageContent pageContentAlias = null; var htmlChildContentSubQuery = QueryOver.Of(() => htmlContentAlias) .JoinAlias(h => h.ChildContents, () => childContentAlias) .Where(() => htmlContentAlias.Id == contentAlias.Id) .And(() => childContentAlias.Child.Id == request.ContentId.Value) .Select(pageContent => 1); var pageContentSubQuery = QueryOver.Of(() => pageContentAlias) .JoinAlias(() => pageContentAlias.Content, () => contentAlias) .And(() => pageContentAlias.Page.Id == alias.Id) .And(() => !contentAlias.IsDeleted) .And(() => !pageContentAlias.IsDeleted) .And(Restrictions.Or( Restrictions.Where(() => contentAlias.Id == request.ContentId.Value), Subqueries.WhereExists(htmlChildContentSubQuery) )) .Select(pageContent => 1); query = query.WithSubquery.WhereExists(pageContentSubQuery); } return(query); }
public PagesGridViewModel <SiteSettingPageViewModel> GetFilteredPagesList(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; PagesView viewAlias = null; SiteSettingPageViewModel modelAlias = null; var query = unitOfWork.Session .QueryOver(() => viewAlias) .Inner.JoinAlias(() => viewAlias.Page, () => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); var hasnotSeoDisjunction = Restrictions.Disjunction() .Add(Restrictions.Eq(Projections.Property(() => viewAlias.IsInSitemap), false)) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaTitle))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaKeywords))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaDescription))); var hasSeoProjection = Projections.Conditional(hasnotSeoDisjunction, Projections.Constant(false, NHibernateUtil.Boolean), Projections.Constant(true, NHibernateUtil.Boolean)); query = FilterQuery(query, request, hasnotSeoDisjunction); query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.Version).WithAlias(() => modelAlias.Version) .Select(() => alias.Title).WithAlias(() => modelAlias.Title) .Select(() => alias.Status).WithAlias(() => modelAlias.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url) .Select(() => alias.Language.Id).WithAlias(() => modelAlias.LanguageId) .Select(() => alias.IsMasterPage).WithAlias(() => modelAlias.IsMasterPage)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); if (configuration.Security.AccessControlEnabled) { IEnumerable <Guid> deniedPages = accessControlService.GetDeniedObjects <PageProperties>(); foreach (var deniedPageId in deniedPages) { var id = deniedPageId; query = query.Where(f => f.Id != id); } } var count = query.ToRowCountFutureValue(); var categoriesFuture = categoryService.GetCategories(); IEnumerable <LookupKeyValue> languagesFuture = configuration.EnableMultilanguage ? languageService.GetLanguagesLookupValues() : null; var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); var layouts = layoutService .GetAvailableLayouts() .Select(l => new LookupKeyValue( string.Format("{0}-{1}", l.IsMasterPage ? "m" : "l", l.TemplateId), l.Title)) .ToList(); var model = CreateModel(pages, request, count, categoriesFuture, layouts); if (languagesFuture != null) { model.Languages = languagesFuture.ToList(); model.Languages.Insert(0, languageService.GetInvariantLanguageModel()); } return(model); }
/// <summary> /// Filters the query. /// </summary> /// <param name="query">The query.</param> /// <param name="request">The request.</param> /// <returns>Query, filtered with specified filter parameters</returns> protected override NHibernate.IQueryOver <PageProperties, PageProperties> FilterQuery(NHibernate.IQueryOver <PageProperties, PageProperties> query, PagesFilter request) { query = base.FilterQuery(query, request); 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 <Root.Models.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); }
public PagesGridViewModel <SiteSettingPageViewModel> GetFilteredUntranslatedPagesList(PagesFilter request) { var model = GetFilteredPagesList(request); if (model != null) { model.HideMasterPagesFiltering = true; var filter = request as UntranslatedPagesFilter; if (model.Languages != null && filter != null && filter.ExcludedLanguageId.HasValue) { var languageToExclude = model.Languages.FirstOrDefault(c => c.Key == filter.ExcludedLanguageId.Value.ToString().ToLowerInvariant()); if (languageToExclude != null) { model.Languages.Remove(languageToExclude); } } } return(model); }
/// <summary> /// Creates the model. /// </summary> /// <param name="pages">The pages.</param> /// <param name="request">The request.</param> /// <param name="count">The count.</param> /// <param name="categoriesFuture">The categories future.</param> /// <returns>Model</returns> protected override PagesGridViewModel <SiteSettingPageViewModel> CreateModel(System.Collections.Generic.IEnumerable <SiteSettingPageViewModel> pages, PagesFilter request, NHibernate.IFutureValue <int> count, System.Collections.Generic.IEnumerable <Root.Models.LookupKeyValue> categoriesFuture) { return(new UntranslatedPagesGridViewModel <SiteSettingPageViewModel>( pages.ToList(), request as UntranslatedPagesFilter, count.Value, categoriesFuture.ToList())); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Result model.</returns> public PagesGridViewModel <SiteSettingPageViewModel> Execute(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; SiteSettingPageViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); if (!request.IncludeArchived) { query = query.Where(() => !alias.IsArchived); } if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query.Where(Restrictions.Disjunction() .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.Title), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaTitle), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaDescription), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaKeywords), searchQuery))); } if (request.CategoryId.HasValue) { query = query.Where(Restrictions.Eq(Projections.Property(() => alias.Category.Id), request.CategoryId.Value)); } if (request.Tags != null) { foreach (var tagKeyValue in request.Tags) { var id = tagKeyValue.Key.ToGuidOrDefault(); query = query.WithSubquery.WhereExists(QueryOver.Of <PageTag>().Where(tag => tag.Tag.Id == id && tag.Page.Id == alias.Id).Select(tag => 1)); } } IProjection hasSeoProjection = Projections.Conditional( Restrictions.Disjunction() .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaTitle))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaKeywords))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaDescription))), Projections.Constant(false, NHibernateUtil.Boolean), Projections.Constant(true, NHibernateUtil.Boolean)); query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.Version).WithAlias(() => modelAlias.Version) .Select(() => alias.Title).WithAlias(() => modelAlias.Title) .Select(() => alias.Status).WithAlias(() => modelAlias.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); var count = query.ToRowCountFutureValue(); var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); return(new PagesGridViewModel <SiteSettingPageViewModel>(pages.ToList(), request, count.Value, categoryService.GetCategories())); }
public bool Execute(ActionCallingContext oActionCallingContext) { // MessageBox.Show("Checkout Action"); SelectionSet selectionSet = new SelectionSet(); Project project = selectionSet.GetCurrentProject(true); //string creator = project.Properties[10013]; //MessageBox.Show(creator); //Location[] location = project.GetLocationObjects(Project.Hierarchy.Plant); //string strDesc1 = ISOCodeUtil.GetISOStringValue(location[0].Properties.LOCATION_DESCRIPTION_SUPPLEMENTARYFIELD[1]); //MessageBox.Show(strDesc1); Page[] pages = project.Pages; DMObjectsFinder finder = new DMObjectsFinder(project); PagePropertyList ppl = new PagePropertyList(); // ppl.DESIGNATION_LOCATION = "C1"; // ppl.DESIGNATION_DOCTYPE = "SINGLE"; // ppl.DESIGNATION_DOCTYPE = "MULTI"; ppl.PAGE_TYPE_NUMERIC = 1; PagesFilter pf = new PagesFilter(); pf.SetFilteredPropertyList(ppl); Page[] sPages = finder.GetPages(pf); // sPages[0]. //FunctionPropertyList fpl = new FunctionPropertyList(); //FunctionsFilter ff = new FunctionsFilter(); //ff.SetFilteredPropertyList() ArrayList list = new ArrayList(); Function[] ffss = finder.GetFunctions(null); foreach (Function f in ffss) { if (f.Category == Function.Enums.Category.Motor) { list.Add(f); ArticleReference[] ars = f.ArticleReferences; if (ars.Count() > 0) { int count = ars[0].Count; Article article = ars[0].Article; } } } ArticleReferencePropertyList arpl = new ArticleReferencePropertyList(); arpl.ARTICLE_MANUFACTURER = "RITTAL"; ArticleReferencesFilter arf = new ArticleReferencesFilter(); arf.SetFilteredPropertyList(arpl); ArticleReference[] fars = finder.GetArticleReferences(arf); foreach (ArticleReference item in fars) { // MessageBox.Show(string.Format("{0}[{1}]({2})", item.Properties.ARTICLEREF_PARTNO, item.Properties.ARTICLE_MANUFACTURER, item.Count)); } // ArticleReference[] farsws = finder.GetArticleReferencesWithFilterScheme("default"); // P8에서 정의한 스키마로 필터 //PagePropertyList newppl = new PagePropertyList(); //// newppl.DESIGNATION_LOCATION = "MULTI"; //newppl.DESIGNATION_DOCTYPE = "MULTI"; //newppl.PAGE_COUNTER = "11"; //newppl.PAGE_NOMINATIOMN = "Insert Macro By API"; //newppl.PAGE_IDENTNAME = "1011"; //newppl.PAGE_NUMBER = "11"; //newppl.PAGE_NAME = "Insert Macro By API"; //Page newPage = new Page(); //newPage.Create(project, DocumentTypeManager.DocumentType.Circuit, newppl); //Insert insert = new Insert(); //PointD point = new PointD(100, 250); //var resultObject = insert.WindowMacro(@"C:\Users\Public\EPLAN26\Data\Macros\EPlanKorea\m.ema", 0, newPage, point, Insert.MoveKind.Absolute); PagePropertyList newppl = new PagePropertyList(); newppl.DESIGNATION_DOCTYPE = "MULTI"; newppl.PAGE_COUNTER = "211"; newppl.PAGE_NOMINATIOMN = "Insert Page Macro By API"; newppl.PAGE_IDENTNAME = "2011"; newppl.PAGE_NUMBER = "211"; newppl.PAGE_NAME = "Insert Page Macro By API"; Page newPage = new Page(); newPage.Create(project, DocumentTypeManager.DocumentType.Circuit, newppl); Insert insert = new Insert(); var resultObject = insert.PageMacro(@"C:\Users\Public\EPLAN26\Data\Macros\EPlanKorea\mPage.emp", newPage, project, false, PageMacro.Enums.NumerationMode.Number); return(true); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Result model.</returns> public virtual PagesGridViewModel <SiteSettingPageViewModel> Execute(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; SiteSettingPageViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); // NOTE: below does not work - need to find out how to rewrite it. // var nodesSubQuery = QueryOver.Of<SitemapNode>() // .Where(x => x.Page.Id == alias.Id || x.UrlHash == alias.PageUrlHash) // .Select(s => 1) // .Take(1); var hasSeoDisjunction = Restrictions.Disjunction() .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaTitle))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaKeywords))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaDescription))); var hasSeoProjection = Projections.Conditional(hasSeoDisjunction, //.Add(Restrictions.IsNull(Projections.SubQuery(nodesSubQuery))), Projections.Constant(false, NHibernateUtil.Boolean), Projections.Constant(true, NHibernateUtil.Boolean)); query = FilterQuery(query, request, hasSeoDisjunction); var sitemapNodesFuture = Repository .AsQueryable <SitemapNode>() .Where(n => !n.IsDeleted && !n.Sitemap.IsDeleted).ToFuture(); query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.Version).WithAlias(() => modelAlias.Version) .Select(() => alias.Title).WithAlias(() => modelAlias.Title) .Select(() => alias.Status).WithAlias(() => modelAlias.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url) .Select(() => alias.Language.Id).WithAlias(() => modelAlias.LanguageId)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); if (configuration.Security.AccessControlEnabled) { IEnumerable <Guid> deniedPages = accessControlService.GetDeniedObjects <PageProperties>(); foreach (var deniedPageId in deniedPages) { var id = deniedPageId; query = query.Where(f => f.Id != id); } } var count = query.ToRowCountFutureValue(); var categoriesFuture = categoryService.GetCategories(); IEnumerable <LookupKeyValue> languagesFuture = configuration.EnableMultilanguage ? languageService.GetLanguages() : null; var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); var layouts = layoutService .GetAvailableLayouts() .Select(l => new LookupKeyValue( string.Format("{0}-{1}", l.IsMasterPage ? "m" : "l", l.TemplateId), l.Title)) .ToList(); var model = CreateModel(pages, request, count, categoriesFuture, layouts); if (languagesFuture != null) { model.Languages = languagesFuture.ToList(); model.Languages.Insert(0, languageService.GetInvariantLanguageModel()); } // NOTE: Query over with subquery in CASE statement and paging des not work. if (sitemapNodesFuture != null) { var nodes = sitemapNodesFuture.ToList(); foreach (var pageViewModel in model.Items) { var hash = pageViewModel.Url.UrlHash(); pageViewModel.HasSEO = pageViewModel.HasSEO && nodes.Any(n => n.UrlHash == hash || (n.Page != null && n.Page.Id == pageViewModel.Id)); } } return(model); }
protected virtual IQueryOver <PageProperties, PageProperties> FilterQuery(IQueryOver <PageProperties, PageProperties> query, PagesFilter request, Junction hasSeoDisjunction) { PageProperties alias = null; if (!request.IncludeArchived) { query = query.Where(() => !alias.IsArchived); } if (request.OnlyMasterPages) { query = query.Where(() => alias.IsMasterPage); } else if (!request.IncludeMasterPages) { query = query.Where(() => !alias.IsMasterPage); } if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query.Where(Restrictions.Disjunction() .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.Title), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaTitle), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaDescription), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaKeywords), searchQuery))); } if (request.CategoryId.HasValue) { query = query.Where(Restrictions.Eq(Projections.Property(() => alias.Category.Id), request.CategoryId.Value)); } if (request.LanguageId.HasValue) { if (request.LanguageId.Value.HasDefaultValue()) { query = query.Where(Restrictions.IsNull(Projections.Property(() => alias.Language.Id))); } else { query = query.Where(Restrictions.Eq(Projections.Property(() => alias.Language.Id), request.LanguageId.Value)); } } if (request.Tags != null) { foreach (var tagKeyValue in request.Tags) { var id = tagKeyValue.Key.ToGuidOrDefault(); query = query.WithSubquery.WhereExists(QueryOver.Of <PageTag>().Where(tag => tag.Tag.Id == id && tag.Page.Id == alias.Id).Select(tag => 1)); } } if (request.Status.HasValue) { if (request.Status.Value == PageStatusFilterType.OnlyPublished) { query = query.Where(() => alias.Status == PageStatus.Published); } else if (request.Status.Value == PageStatusFilterType.OnlyUnpublished) { query = query.Where(() => alias.Status != PageStatus.Published); } else if (request.Status.Value == PageStatusFilterType.ContainingUnpublishedContents) { const ContentStatus draft = ContentStatus.Draft; Root.Models.Content contentAlias = null; var subQuery = QueryOver.Of <PageContent>() .JoinAlias(p => p.Content, () => contentAlias) .Where(pageContent => pageContent.Page.Id == alias.Id) .And(() => contentAlias.Status == draft) .And(() => !contentAlias.IsDeleted) .Select(pageContent => 1); query = query.WithSubquery.WhereExists(subQuery); } } if (request.SeoStatus.HasValue) { var subQuery = QueryOver.Of <SitemapNode>() .Where(x => x.Page.Id == alias.Id || x.UrlHash == alias.PageUrlHash) .And(x => !x.IsDeleted) .JoinQueryOver(s => s.Sitemap) .And(x => !x.IsDeleted) .Select(s => 1); if (request.SeoStatus.Value == SeoStatusFilterType.HasSeo) { // NOT(seo disjunction) AND EXISTS(subquery) query = query .Where(Restrictions.Not(hasSeoDisjunction)) .WithSubquery.WhereExists(subQuery); } else { // seo disjunction OR NOT EXISTS(subquery) var disjunction = hasSeoDisjunction .DeepClone() .Add(Subqueries.WhereNotExists(subQuery)); query = query.Where(disjunction); } } if (!string.IsNullOrWhiteSpace(request.Layout)) { Guid id; var length = request.Layout.Length - 2; if (request.Layout.StartsWith("m-") && Guid.TryParse(request.Layout.Substring(2, length), out id)) { query = query.Where(() => alias.MasterPage.Id == id); } if (request.Layout.StartsWith("l-") && Guid.TryParse(request.Layout.Substring(2, length), out id)) { query = query.Where(() => alias.Layout.Id == id); } } return(query); }