Я пытаюсь отсортировать список продуктов по значению ранга, значение ранга меняется в зависимости от того, на какой странице вы находите продукт, это означает, что мне нужно отфильтровать свойство массива в документе до одного элемента, который содержит ранг, затем используйте это значение для упорядочивания документов, мне нужно сделать это в базе данных, так как есть что-то до 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