OrderBy встроенные документы

2

Я пытаюсь упорядочить мои результаты по значению во встроенном документе.

Рассмотрим модель, например:

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()?

  • 0
    правильно ли я вас понимаю, если скажу, что вы пытаетесь исключить из своего результата и объект Car, и объект Passanger?
  • 0
    Я полагаю, что он пытается получить список всех пассажиров в Фордах по возрасту.
Теги:
mongodb-.net-driver

1 ответ

2
Лучший ответ

Возможно, вы можете переписать его с помощью 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 С#.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню