protected virtual IList <SortingField> GetSorting(ProductIndexedSearchCriteria criteria) { var result = new List <SortingField>(); var priorityFields = criteria.GetPriorityFields(); foreach (var sortInfo in criteria.SortInfos) { var sortingField = new SortingField(); if (sortInfo is GeoSortInfo geoSortInfo) { sortingField = new GeoDistanceSortingField { Location = geoSortInfo.GeoPoint }; } sortingField.FieldName = sortInfo.SortColumn.ToLowerInvariant(); sortingField.IsDescending = sortInfo.SortDirection == SortDirection.Descending; switch (sortingField.FieldName) { case "price": if (!criteria.Pricelists.IsNullOrEmpty()) { result.AddRange( criteria.Pricelists.Select(priceList => new SortingField($"price_{criteria.Currency}_{priceList}".ToLowerInvariant(), sortingField.IsDescending))); } else { result.Add(new SortingField($"price_{criteria.Currency}".ToLowerInvariant(), sortingField.IsDescending)); } break; case "priority": result.AddRange(priorityFields.Select(priorityField => new SortingField(priorityField, sortingField.IsDescending))); break; case "name": case "title": result.Add(new SortingField("name", sortingField.IsDescending)); break; default: result.Add(sortingField); break; } } if (!result.Any()) { result.AddRange(priorityFields.Select(priorityField => new SortingField(priorityField, true))); result.Add(new SortingField("__sort")); } return(result); }
public SearchRequestBuilder AddSorting(string sort) { var sortFields = new List <SortingField>(); foreach (var sortInfo in SortInfo.Parse(sort)) { var sortingField = new SortingField(); if (sortInfo is GeoSortInfo geoSortInfo) { sortingField = new GeoDistanceSortingField { Location = geoSortInfo.GeoPoint }; } sortingField.FieldName = sortInfo.SortColumn.ToLowerInvariant(); sortingField.IsDescending = sortInfo.SortDirection == SortDirection.Descending; switch (sortingField.FieldName) { case "name": case "title": sortFields.Add(new SortingField("name", sortingField.IsDescending)); break; default: sortFields.Add(sortingField); break; } } if (sortFields.Any()) { SearchRequest.Sorting = sortFields; } return(this); }