protected void ApplySort(ResultSort oSort) { IEnumerable <Document> oDocuments; Field oField; if (oSort.Order) { oDocuments = ResultDocuments.OrderBy(oDocument => (oField = oDocument.GetField(oSort.Field)) != null ? oField.StringValue : string.Empty); } else { oDocuments = ResultDocuments.OrderByDescending(oDocument => (oField = oDocument.GetField(oSort.Field)) != null ? oField.StringValue : string.Empty); } oResultDocuments = oDocuments.ToArray(); }
protected void SearchButton_Click(object sender, EventArgs e) { var searchTitle = TitleSearch.Text; var searchDescription = DescriptionSearch.Text; var searchPageCount = PagesCountSearch.Text; var searchTitleTemplate = $"<Contains><FieldRef Name='Title'></FieldRef><Value Type='Text'>{searchTitle}</Value></Contains>"; var searchDescriptionTemplate = $"<Contains><FieldRef Name='Announcement'></FieldRef><Value Type='Text'>{searchDescription}</Value></Contains>"; var searchPageCountTemplate = $"<Eq><FieldRef Name='PagesCount'></FieldRef><Value Type='Number'>{searchPageCount}</Value></Eq>"; var propsSearchArr = new Stack(); var totalSearchParamsCount = 0; if (!string.IsNullOrEmpty(searchTitle)) { totalSearchParamsCount++; propsSearchArr.Push(searchTitleTemplate); } if (!string.IsNullOrEmpty(searchDescription)) { totalSearchParamsCount++; propsSearchArr.Push(searchDescriptionTemplate); } if (!string.IsNullOrEmpty(searchPageCount)) { totalSearchParamsCount++; propsSearchArr.Push(searchPageCountTemplate); } var camlQuery = string.Concat("<Where>", totalSearchParamsCount > 0 ? "<And>" : "", totalSearchParamsCount > 1 ? "<And>" : "", "<BeginsWith>", "<FieldRef Name='ContentTypeId'></FieldRef>", "<Value Type='ContentTypeId'>", searchContentType, "</Value>", "</BeginsWith>", totalSearchParamsCount > 0 ? propsSearchArr.Pop() : "", totalSearchParamsCount > 0 ? "</And>" : "", totalSearchParamsCount > 2 ? "<And>" : "", totalSearchParamsCount > 1 ? propsSearchArr.Pop() : "", totalSearchParamsCount > 2 ? propsSearchArr.Pop() : "", totalSearchParamsCount > 1 ? "</And>" : "", totalSearchParamsCount > 2 ? "</And>" : "", "</Where>", "<OrderBy>", "<FieldRef Name='Modified' Ascending='FALSE' />", "</OrderBy>"); var siteQuery = new CrossListQueryInfo(); siteQuery.Lists = listsSearch; siteQuery.Query = camlQuery; siteQuery.ViewFields = viewFieldsSearch; siteQuery.Webs = websSearch; siteQuery.UseCache = false; var siteQueryCache = new CrossListQueryCache(siteQuery); var results = siteQueryCache.GetSiteData(SPContext.Current.Site); foreach (DataRow row in results.Rows) { row["PagesCount"] = row["PagesCount"].ToString().Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries)[0]; } for (var i = results.Columns.Count - 1; i >= 0; i--) { switch (results.Columns[i].ColumnName) { case "Title": case "Announcement": case "PagesCount": break; default: results.Columns.RemoveAt(i); break; } } ResultDocuments.DataSource = results; ResultDocuments.DataBind(); }