2016-06-14 86 views
0

這裏的設置,我有包含像這樣的事件列表的對象:如何在嵌套對象的查詢類型在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屬性,但谷歌和我的努力沒有想出什麼好東西呢。

謝謝。

回答

1

您可以做的是使IsComplete()函數成爲只讀屬性。這樣它將在存儲的文檔中序列化爲IsComplete: true/false

那麼你應該能夠查詢是這樣的:

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

希望這有助於!

+1

這並不是我期望的答案,但是它讓代碼更易於閱讀和使用。有時候,簡單的答案是最好的答案。謝謝! – Yojin