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 查询运算符。

这是可以理解的 C# mongo 驱动程序的限制。
有解决方法吗?

如果做不到这一点,我怎么能在我的 .ToList() 之后订购它们?

4

1 回答 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);

您可以在此处找到MongoDb C# 驱动程序直接支持的 LINQ 操作

于 2012-07-11T14:26:14.987 回答