2016-09-01 86 views
1

我已經開始在C#項目中使用RavenDB。我有證件與結構:在RavenDB中處理帶點的前綴

{ 
    "MessageId": "8c34dec8-e6fe-6bee-2dc6-2cf83e374090", 
    "Headers": { 
    "Header.MessageId": "14f6cdf3-142d-4ab0-9610-a65600f1f460", 
    "Header.Timestamp": "2016-08-02 12:40:55:783130 Z", 
    "$.diagnostics.host": "1ddc6cefd4d776f1de8fefc33a45d020", 
    }, 
    "Timestamp": "2016-08-02T12:43:25.3914940Z" 
} 

我可以得到的MessageId文件:

var doc = session.Query<Messages>().Where(w => w.MessageId == "8c34dec8-e6fe-6bee-2dc6-2cf83e374090").ToList(); 

但我想獲得的文件:Headers.Header.MessageId。 不幸的是在標題中有前綴(Header和$)的鍵,我不知道如何處理它在session.Query<Messages>()聲明。

我能做到這一點在RavenDB演播室:

from doc in docs.Messages 
where doc.Headers["Header.MessageId"] == "14f6cdf3-142d-4ab0-9610-a65600f1f460" 
select new { 
    Id = doc.MessageId, 
    MessageId = doc.Headers["Header.MessageId"] 
} 

我試圖創建Lucene的查詢,但它不工作:

var doc = session.Advanced.LuceneQuery<object>().WhereEquals("Headers.Header.MessageId", "14f6cdf3-142d-4ab0-9610-a65600f1f460").ToList(); 

你能告訴我什麼,我做錯了,幫我請?

回答

0

是您的文檔是否由管理員創建?因爲你的文檔不能用.net類(也是通過消息)來表示(你不能使用點的屬性名),這意味着你不能加載文檔;您需要修補文檔(去除點)