OrderBy嵌入式文档

时间:2012-07-11 13:49:02

标签: c# mongodb mongodb-.net-driver

我正在尝试按嵌入文档中的值排序结果。

考虑如下模型:

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

之后订购它们

1 个答案:

答案 0 :(得分: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);

您可以在此处找到directly supported LINQ operations for the MongoDb C# driver