protected virtual void VisitWhereIn(WhereInExpression expression) { IWhereExpression exp = new FalseExpression(); foreach (var value in expression.Values) { exp = new OrElseExpression(exp, new WhereEqualsExpression(null, expression.FieldName, value)); } this.VisitWhere(exp); }
public void Test_NestedOr() { IWhereExpression exp = new FalseExpression(); exp = new OrElseExpression(exp, (new WhereContainsExpression(null, "title", "news1"))); exp = new OrElseExpression(exp, (new WhereContainsExpression(null, "title", "news2"))); var news = newsFolder.CreateQuery().Where(exp); Assert.AreEqual(3, news.Count()); }
protected override void VisitOrElse(OrElseExpression expression) { string leftClause = ""; string leftViewName = ""; if (!(expression.Left is FalseExpression)) { var leftVisitor = VisitInner(expression.Left); leftClause = leftVisitor.WhereClause; leftViewName = leftVisitor.ViewName; if (leftVisitor.OrderClause != null) { this.OrderClause = leftVisitor.OrderClause; } this.eqUUIDs.AddRange(leftVisitor.EQUUIDs); this.eqUserKeys.AddRange(leftVisitor.EQUserKeys); } string rightClause = ""; string rightViewName = ""; if (!(expression.Right is FalseExpression)) { var rightVisitor = VisitInner(expression.Right); rightClause = rightVisitor.WhereClause; rightViewName = rightVisitor.ViewName; if (rightVisitor.OrderClause != null) { this.OrderClause = rightVisitor.OrderClause; } this.eqUUIDs.AddRange(rightVisitor.EQUUIDs); this.eqUserKeys.AddRange(rightVisitor.EQUserKeys); } if (!string.IsNullOrEmpty(leftClause) && !string.IsNullOrEmpty(rightClause)) { whereClause.AppendFormat(string.Format("({0}||{1})", leftClause, rightClause)); viewNameBuilder.AppendFormat("_({0}_OR_{1})", leftViewName, rightViewName); } else if (!string.IsNullOrEmpty(leftClause)) { whereClause.AppendFormat(string.Format("{0}", leftClause)); viewNameBuilder.AppendFormat("_{0}", leftViewName); } else if (!string.IsNullOrEmpty(rightClause)) { whereClause.AppendFormat(string.Format("{0}", rightClause)); viewNameBuilder.AppendFormat("_{0}", rightViewName); } }
public IContentQuery <T> Or(IWhereExpression expression) { IExpression exp = null; if (this.Expression is IWhereExpression) { exp = new OrElseExpression((IWhereExpression)this.Expression, expression); } else { exp = new OrElseExpression(new FalseExpression(), expression); } return(this.Create(exp)); }
public FileListViewModel GetList( string repositoryName, string siteName, string folderName, string search, int skip = 0, int size = 20) { if (size < 1) { size = 20; } var repository = new Repository(repositoryName).AsActual(); var currentFolder = _mediaFolderManager.Get(repository, folderName); if (currentFolder == null) { currentFolder = new MediaFolder(repository, folderName); _mediaFolderManager.Add(repository, currentFolder); } var contentQuery = currentFolder.CreateQuery(); if (!string.IsNullOrEmpty(search)) { IWhereExpression expression = new WhereContainsExpression(null, "FileName", search); expression = new OrElseExpression(expression, new WhereContainsExpression(null, "Metadata.AlternateText", search)); expression = new OrElseExpression(expression, new WhereContainsExpression(null, "Metadata.Description", search)); contentQuery = contentQuery .Where(expression); } var page = skip / size; contentQuery = contentQuery.SortBy("UtcCreationDate", "desc"); var pagedList = contentQuery.ToPageList(page, size); return(new FileListViewModel { total = pagedList.TotalItemCount, start = skip, list = pagedList.Select(it => new FileViewModel { url = it.Url, mtime = DateTime.UtcNow.Ticks }), state = "SUCCESS" }); }
private ActionResult MediaContentGrid(string folderName, string search, int?page, int?pageSize, string sortField, string sortDir, string listType) { var viewName = ControllerContext.RequestContext.GetRequestValue("action"); if (!string.IsNullOrEmpty(listType)) { viewName = viewName + "_" + listType; } if (string.IsNullOrWhiteSpace(folderName)) { var folders = FolderManager.All(Repository, search, ""); return(View(viewName, new MediaContentGrid { ChildFolders = folders })); } else { IEnumerable <MediaFolder> childFolders = new MediaFolder[0]; if (!page.HasValue || page.Value <= 1) { childFolders = FolderManager.All(Repository, search, folderName); } var currentFolder = FolderManager.Get(Repository, folderName); var contentQuery = currentFolder.CreateQuery(); if (!string.IsNullOrEmpty(search)) { IWhereExpression expression = new WhereContainsExpression(null, "FileName", search); expression = new OrElseExpression(expression, new WhereContainsExpression(null, "Metadata.AlternateText", search)); expression = new OrElseExpression(expression, new WhereContainsExpression(null, "Metadata.Description", search)); contentQuery = contentQuery .Where(expression); } contentQuery = contentQuery.SortBy(sortField, sortDir); return(View(viewName, new MediaContentGrid { ChildFolders = childFolders, Contents = contentQuery.ToPageList(page ?? 0, pageSize ?? 50) })); } }
public virtual ActionResult Index(string folderName, string parentUUID, string parentFolder, string search , IEnumerable <WhereClause> whereClause, int?page, int?pageSize, string sortField = null, string sortDir = null) { //compatible with the Folder parameter changed to FolderName. folderName = folderName ?? this.ControllerContext.RequestContext.GetRequestValue("Folder"); TextFolder textFolder = new TextFolder(Repository, folderName).AsActual(); var schema = textFolder.GetSchema().AsActual(); SchemaPath schemaPath = new SchemaPath(schema); ViewData["Folder"] = textFolder; ViewData["Schema"] = schema; ViewData["Template"] = textFolder.GetFormTemplate(FormType.Grid); ViewData["WhereClause"] = whereClause; SetPermissionData(textFolder); IEnumerable <TextFolder> childFolders = new TextFolder[0]; //Skip the child folders on the embedded folder grid. if (string.IsNullOrEmpty(parentFolder)) { if (!page.HasValue || page.Value <= 1) { childFolders = TextFolderManager.ChildFolders(textFolder, search).Select(it => it.AsActual()); } } IContentQuery <TextContent> query = textFolder.CreateQuery(); query = SortByField(sortField, sortDir, query); bool showTreeStyle = schema.IsTreeStyle; //如果有带搜索条件,则不输出树形结构 if (!string.IsNullOrEmpty(search)) { IWhereExpression exp = new FalseExpression(); foreach (var item in schema.Columns.Where(it => it.ShowInGrid)) { exp = new OrElseExpression(exp, (new WhereContainsExpression(null, item.Name, search))); } if (exp != null) { query = query.Where(exp); } showTreeStyle = false; } if (whereClause != null && whereClause.Count() > 0) { var expression = WhereClauseToContentQueryHelper.Parse(whereClause, schema, new MVCValueProviderWrapper(ValueProvider)); query = query.Where(expression); showTreeStyle = false; } if (!string.IsNullOrWhiteSpace(parentUUID)) { query = query.WhereEquals("ParentUUID", parentUUID); } else { //有两种情况需要考虑要不要查询所有的数据(ParentUUID=null) //1.树形结构数据,第一次查询需要过滤ParentUUID==null //2.自嵌套的目前结构,也需要过滤ParentUUID==null var selfEmbedded = textFolder.EmbeddedFolders != null && textFolder.EmbeddedFolders.Contains(textFolder.FullName, StringComparer.OrdinalIgnoreCase); if (showTreeStyle || selfEmbedded) { query = query.Where(new OrElseExpression(new WhereEqualsExpression(null, "ParentUUID", null), new WhereEqualsExpression(null, "ParentUUID", ""))); } } if (childFolders != null) { childFolders = childFolders .Select(it => it.AsActual()) .Where(it => it.Visible) .Where(it => Kooboo.CMS.Content.Services.ServiceFactory.WorkflowManager.AvailableViewContent(it, User.Identity.Name)); } page = page ?? 1; pageSize = pageSize ?? textFolder.PageSize; //var pagedList = query.ToPageList(page.Value, pageSize.Value); //IEnumerable<TextContent> contents = pagedList.ToArray(); //if (Repository.EnableWorkflow == true) //{ // contents =WorkflowManager.GetPendWorkflowItemForContents(Repository, contents.ToArray(), User.Identity.Name); //} //var workflowContentPagedList = new PagedList<TextContent>(contents, page.Value, pageSize.Value, pagedList.TotalItemCount); //ViewData["ContentPagedList"] = workflowContentPagedList; return(View(new TextContentGrid() { ChildFolders = childFolders.ToArray(), ContentQuery = query, PageIndex = page.Value, PageSize = pageSize.Value, ShowTreeStyle = showTreeStyle })); }
public virtual ActionResult SelectCategories(string folderName, string selected, int?page, int?pageSize, string search, IEnumerable <WhereClause> whereClause , string sortField = null, string sortDir = null) { var textFolder = (TextFolder)(FolderHelper.Parse <TextFolder>(Repository, folderName).AsActual()); var singleChoice = string.Equals("True", Request.RequestContext.GetRequestValue("SingleChoice"), StringComparison.OrdinalIgnoreCase); Schema schema = new Schema(Repository, textFolder.SchemaName).AsActual(); SchemaPath schemaPath = new SchemaPath(schema); ViewData["Folder"] = textFolder; ViewData["Schema"] = schema; ViewData["Template"] = textFolder.GetFormTemplate(FormType.Selectable); ViewData["WhereClause"] = whereClause; IEnumerable <TextFolder> childFolders = new TextFolder[0]; //Skip the child folders on the embedded folder grid. if (!page.HasValue || page.Value <= 1) { childFolders = ServiceFactory.TextFolderManager.ChildFoldersWithSameSchema(textFolder).Select(it => it.AsActual()); } var query = textFolder.CreateQuery(); query = SortByField(sortField, sortDir, query); bool showTreeStyle = schema.IsTreeStyle; if (showTreeStyle) { query = query.Where(new OrElseExpression(new WhereEqualsExpression(null, "ParentUUID", null), new WhereEqualsExpression(null, "ParentUUID", ""))); } if (!string.IsNullOrEmpty(search)) { IWhereExpression exp = new FalseExpression(); foreach (var item in schema.Columns.Where(it => it.ShowInGrid)) { exp = new OrElseExpression(exp, (new WhereContainsExpression(null, item.Name, search))); } if (exp != null) { query = query.Where(exp); } showTreeStyle = false; } if (whereClause != null && whereClause.Count() > 0) { var expression = WhereClauseToContentQueryHelper.Parse(whereClause, schema, new MVCValueProviderWrapper(ValueProvider)); query = query.Where(expression); showTreeStyle = false; } var contents = query.ToPageList(page ?? 1, pageSize ?? textFolder.PageSize, textFolder.EnablePaging.HasValue ? textFolder.EnablePaging.Value : true); SelectableViewModel viewModel = new SelectableViewModel() { ShowTreeStyle = showTreeStyle, ChildFolders = childFolders, Contents = contents, SingleChoice = singleChoice }; if (Request.IsAjaxRequest()) { return(PartialView("", viewModel)); } else { IEnumerable <TextContent> selectedContents = new TextContent[0]; if (!string.IsNullOrEmpty(selected)) { string[] selectedArr = selected.Split(','); IContentQuery <TextContent> selectedQuery = textFolder.CreateQuery().DefaultOrder(); foreach (var userKey in selectedArr) { selectedQuery = selectedQuery.Or((IWhereExpression)textFolder.CreateQuery().DefaultOrder().WhereEquals("UUID", userKey).Expression); } selectedContents = selectedQuery; } viewModel.Selected = selectedContents; } return(View(viewModel)); }
protected abstract void VisitOrElse(OrElseExpression expression);