如何在 RavenDB 中查询嵌套对象的类型
How to query on the type of a nested object in RavenDB
这是设置,我有一个包含事件列表的对象,如下所示:
public class Order
{
public string Name {get; set;}
public List<OrderEvent> OrderEvents {get; set;}
public bool IsComplete() => OrderEvents.Any(e => e.GetType() == typeof(OrderComplete));
}
public class OrderEvent
{
public DateTime TimeStamp {get; set;}
}
public class OrderSubmitted : OrderEvent {...quantity ect...}
public class OrderPaidFor : OrderEvent {...amounts...}
public class OrderComplete : OrderEvent {...more stuff...}
现在我可以将这些数据转储到数据库中并将其提取出来,一切都很好,但是我如何编写一个查询来只获取已完成的订单,而不是在客户端提取所有订单并在那里进行过滤?
我尝试了以下查询,但有人告诉我我不能那样翻译 GetType。
Session.Query<Order>()
.Where(o => o.Events.Any(e => e.GetType() == typeof(OrderComplete)))
.ToList();
我很确定有一种使用 JObjects 并查询 $type 属性 来执行此操作的好方法,但是 google 和我的努力还没有找到任何好的结果。
谢谢。
您可以做的是将 IsComplete()
函数设为只读 属性。这样它将在存储的文档中序列化为 IsComplete: true/false
。
那么你应该可以这样查询:
Session.Query<Order>()
.Where(o => o.IsComplete)
.ToList();
希望对您有所帮助!
这是设置,我有一个包含事件列表的对象,如下所示:
public class Order
{
public string Name {get; set;}
public List<OrderEvent> OrderEvents {get; set;}
public bool IsComplete() => OrderEvents.Any(e => e.GetType() == typeof(OrderComplete));
}
public class OrderEvent
{
public DateTime TimeStamp {get; set;}
}
public class OrderSubmitted : OrderEvent {...quantity ect...}
public class OrderPaidFor : OrderEvent {...amounts...}
public class OrderComplete : OrderEvent {...more stuff...}
现在我可以将这些数据转储到数据库中并将其提取出来,一切都很好,但是我如何编写一个查询来只获取已完成的订单,而不是在客户端提取所有订单并在那里进行过滤?
我尝试了以下查询,但有人告诉我我不能那样翻译 GetType。
Session.Query<Order>()
.Where(o => o.Events.Any(e => e.GetType() == typeof(OrderComplete)))
.ToList();
我很确定有一种使用 JObjects 并查询 $type 属性 来执行此操作的好方法,但是 google 和我的努力还没有找到任何好的结果。
谢谢。
您可以做的是将 IsComplete()
函数设为只读 属性。这样它将在存储的文档中序列化为 IsComplete: true/false
。
那么你应该可以这样查询:
Session.Query<Order>()
.Where(o => o.IsComplete)
.ToList();
希望对您有所帮助!