我在 C# Asp.Net 中使用 RavenDB,并且在应用 OrderBy 时遇到问题,该 OrderBy 按子集合中的值进行排序。我的模型的一个基本示例是:
public class Record
{
public string Id { get; set; }
public string Name {get; set; }
public Field[] Fields { get; set; }
}
public class Field
{
public string Name { get; set; }
public string Value { get; set; }
}
这样可以保存到 RavenDB
{
"Name": "A Name Of Somesort"
"Fields": [
{
"Name": "Colour",
"Value": "Red"
},
{
"Name": "Size",
"Value": "Large"
}
]
}
想象大量这些记录保存到数据库中,我可以像这样得到这些数据的页面
using (var session = documentStore.OpenSession("TestDB"))
{
var result = session.Query<Record>().Skip(0).Take(10).ToList();
}
我想做的是能够根据字段值对记录进行排序(例如:根据名称为“颜色”的字段的值对记录进行排序)
编辑:
为了帮助进一步解释,我想要实现的是如下所示,但是在 RavenDB 中不允许这样做,所以我需要找到一种替代方法(如果可能的话)
using (var session = documentStore.OpenSession("TestDB"))
{
var result = session.Query<Record>()
.OrderBy(v => v.Fields.First(f => f.Name == "Colour").Value)
.Skip(0)
.Take(10)
.ToList();
}
这将引发一个带有以下消息的新 ArgumentException
Invalid computation: v.Fields.First(f => (f.Name == "Colour")).Value. You cannot use computation (only simple member expression are allowed) in RavenDB queries.