我已经开始在C#项目中使用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
。
遗憾的是,在标题中有带前缀的键(标题和$),我不知道如何在session.Query<Messages>()
语句中处理它。
我可以在RavenDB Studio中完成:
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 :(得分:0)
是您与管理层一起创建的文档吗?因为您的文档无法在.net类中表示(也可以通过消息)(您不能使用带有点的属性名称),这意味着您无法加载文档;你需要修补文档(删除点)