Я пытаюсь упорядочить мои результаты по значению во встроенном документе.
Рассмотрим модель, например:
public class Car
{
public Guid ID { get; set; }
public string Name { get; set; }
public IEnumerable<Passenger> Passengers { get; set; }
}
public class Passenger
{
public Guid ID { get; set; }
public virtual string Name { get; set; }
public virtual int Age { get; set; }
}
Я пытаюсь запросить коллекцию Car
и заказать с помощью Passenger.Age
Мой запрос выглядит примерно так:
var results = (from car in _db.GetCollection<Car>("car").AsEnumerable()
from passenger in car.Passengers
where car.Name == "Ford"
orderby passenger.Age).ToList();
При этом я получаю следующее исключение:
Оператор запроса SelectMany не поддерживается.
Это, по понятным причинам, ограничение для драйвера С# mongo.
Есть ли способ обхода?
В противном случае, как я мог их заказать после моего .ToList()?
Возможно, вы можете переписать его с помощью AsQueryable()
, чтобы получить коллекцию IEnumerable
из ToList()
назад, из которой вы можете затем выполнить запрос с любым LINQ, который хотите использовать, а не только с операциями, напрямую поддерживаемыми MongoCollection
:
var passengers = _db.GetCollection<Car>("car").AsQueryable().ToList()
.Where(car => car.Name == "Ford")
.SelectMany(ford => ford.Passengers)
.OrderBy(p => p.Age);
Здесь вы можете найти напрямую поддерживаемые операции LINQ для драйвера MongoDb С#.