private List <TDoc> getSortedCards(FieldSortInfo defaultSort) { if (_sortedDocsByDefaultSort.TryGetValue(defaultSort, out var result)) { return(result); } var docs = GetDocuments(); result = new List <TDoc>(sort(docs, SortInfo, defaultSort)); _sortedDocsByDefaultSort.Add(defaultSort, result); return(result); }
public static IOrderedEnumerable <TDoc> OrderBy <TDoc>(this IEnumerable <TDoc> docs, FieldSortInfo fieldSortInfo, Fields <TDoc> fields) => fields.ByName[fieldSortInfo.FieldName].OrderBy(docs, fieldSortInfo.SortOrder);
private List <TDoc> sort(IEnumerable <TDoc> docs, IList <FieldSortInfo> sortInfo, FieldSortInfo defaultSort) { var relevanceById = _searchSubsystem?.SearchResult?.RelevanceById; float getRelevance(TDoc c) { var id = GetId(c); return(id == null ? int.MaxValue : relevanceById?.TryGet(id) ?? 0f); } if (sortInfo.Count == 0) { return(docs .OrderByDescending(getRelevance) .ThenBy(defaultSort, _fields) .ToList()); } using (var enumerator = sortInfo.GetEnumerator()) { enumerator.MoveNext(); var cardsOrdered = docs.OrderBy(enumerator.Current, _fields); while (enumerator.MoveNext()) { cardsOrdered = cardsOrdered.ThenBy(enumerator.Current, _fields); } cardsOrdered = cardsOrdered .ThenByDescending(getRelevance) .ThenBy(defaultSort, _fields); var result = cardsOrdered.ToList(); return(result); } }
public static IOrderedEnumerable <Card> OrderBy(this IEnumerable <Card> cards, FieldSortInfo fieldSortInfo, Fields fields) { return(fields.ByName[fieldSortInfo.FieldName].OrderBy(cards, fieldSortInfo.SortOrder)); }