C# Сортировка Linq MongoDB по одному элементу в массиве поддокументов - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь отсортировать список продуктов по значению ранга, значение ранга меняется в зависимости от того, на какой странице вы находите продукт, это означает, что мне нужно отфильтровать свойство массива в документе до одного элемента, который содержит ранг, затем используйте это значение для упорядочивания документов, мне нужно сделать это в базе данных, так как есть что-то до 250 000 документов. Я потратил много часов, пытаясь решить эту проблему, и у меня осталась одна проблема.Я не могу каким-либо образом фильтровать свойство массива при выборе значений, поэтому он всегда возвращает null, если я не использую индекс, который я не могу использовать как Я не буду знать это для каждого ранга.

Это то, что у меня сейчас есть:

var result = uniProducts
    .Select(x => new Test() 
    { 
        UniqueProductId = x.Id, 
        Rank = x.Ranks.FirstOrDefault(x => x.SearchPageId == sofaPage.Id).Rank 
    })
    .OrderBy(x => x.Rank)
    .Skip(contract.ItemsPerPage * contract.PageNumber)
    .Take(contract.ItemsPerPage)
    .Select(x => x.UniqueProductId)
    .ToList();

Эта версия работает, поскольку я жестко кодирую индекс:

var result = uniProducts
    .Select(x => new Test() 
    { 
        UniqueProductId = x.Id, 
        Rank = x.Ranks[0].Rank 
    })
    .OrderBy(x => x.Rank)
    .Skip(contract.ItemsPerPage * contract.PageNumber)
    .Take(contract.ItemsPerPage)
    .Select(x => x.UniqueProductId)
    .ToList();

Любая помощь была бы замечательной, даже если ответ заключается в том, что это невозможно сделать в linq, но можно сделать с помощью фильтров mongoDB

...