我正在尝试按嵌入文档中的值对结果进行排序。
考虑一个模型,例如:
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/