如何在 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();

希望对您有所帮助!