如何查询RavenDB中嵌套对象的类型

时间:2016-06-14 21:26:12

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

我很确定使用JObject并查询$ type属性有一个很好的方法,但谷歌和我的努力还没有提出任何好的。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以做的是将IsComplete()函数改为只读属性。这样,它会在存储的文档中序列化为IsComplete: true/false

然后你应该可以像这样查询:

Session.Query<Order>()
   .Where(o => o.IsComplete)
   .ToList();

希望这有帮助!