c# - 按嵌入文档排序

标签 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();

这样,我得到以下异常:

The SelectMany query operator is not supported.

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

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

最佳答案

您可以使用 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 .

关于c# - 按嵌入文档排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11434131/

相关文章:

c# - 如何将函数返回值编码到非托管 dll

c# - 当它移动到 Sprite 上时如何使 Sprite 变慢?

mongodb - 传入TypeORM MongoDB ObjectIdColumns的未定义时禁用ID的自动生成

c# - 为什么 AsQueryable<T> 不暗示 _t 鉴别器上的过滤器

c# - 确定来自另一个项目的窗体是否打开

c# - 从 C# 中的 .dll 文件中提取图标组

.net-4.0 - MongoDB 和复杂数组搜索

c# - 如何在 BsonDocument 中添加字典类型的对象作为 BsonElement

javascript - 尽管之前有相同的连接工作,但 mongodb 'failed to connect to server' 错误

javascript - MongoDB "Failed to query for documents to update ... unable to decode message length: EOF"