【问题标题】:OrderBy embedded documentsOrderBy 嵌入文档
【发布时间】:2012-07-11 03:47:56
【问题描述】:

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

考虑一个模型,例如:

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() 之后订购它们?

【问题讨论】:

  • 如果我说您要从结果中同时取出 Car 对象和 Passanger 对象,我是否理解正确?
  • 我相信他正在尝试按年龄列出福特斯所有乘客的名单。

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


【解决方案1】:

您可能可以使用AsQueryable() 重新编写此代码,以从ToList() 返回一个IEnumerable 集合,然后您可以从中进一步查询您想要使用的任何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

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 2015-01-26
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多