Пример #1
0
        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);
        }
Пример #2
0
 public static IOrderedEnumerable <TDoc> OrderBy <TDoc>(this IEnumerable <TDoc> docs, FieldSortInfo fieldSortInfo, Fields <TDoc> fields) =>
 fields.ByName[fieldSortInfo.FieldName].OrderBy(docs, fieldSortInfo.SortOrder);
Пример #3
0
        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);
            }
        }
Пример #4
0
 public static IOrderedEnumerable <Card> OrderBy(this IEnumerable <Card> cards, FieldSortInfo fieldSortInfo, Fields fields)
 {
     return(fields.ByName[fieldSortInfo.FieldName].OrderBy(cards, fieldSortInfo.SortOrder));
 }