我有一个'留言'课程:
public class User { public string Name { get;set; } /*Other properties*/ }
public class Message {
public User From { get;set; }
public ICollection<User> To { get;set; }
public string Title { get;set; }
/* Others */
}
我有一个如此定义的索引:(是的,直接出于'我一直关注教程视频')
public class Message_ToFromTitle : AbstractIndexCreationTask
{
public override IndexDefinition CreateIndexDefinition()
{
return new IndexDefinition
{
Map = "from m in docs.Messages select new { Query = new[] { m.Title, m.From.Name, m.To.Select(r => r.Name), } }",
Indexes = {{"Query", FieldIndexing.Analyzed}}
};
}
}
在管理工作室中,我可以使用Query:Chris
之类的内容成功查询,并且它会将所有Messages
与Chris一起带入“收件人”,“发件人”或“标题”,这很棒。
我的问题是如何从.NET查询? 我试过了:
session.Advanced.LuceneQuery<Message, Message_ToFromTitle>().Where("Query:Chris");
有效,但我想做的是:
session.Query<Message, Message_ToFromTitle>().Where(m => m == "Chris");
但是,乌鸦(非常正确)不知道如何处理'm',因为我可能需要以某种方式查询Query
。
Advanced
路线是唯一对我开放的路线吗?我很高兴改变索引定义,我使用了非泛型AbstractIndexCreationTask
,因为我在最后做了m.To.Select(r=>r.Name)
位,不能用C#编译,但是被解释按照我想要的方式在Raven,但如果需要的话,愿意并且很乐意改变为通用的!
答案 0 :(得分:0)
你可能意味着你想要这样做:
session.Query<Message, Message_ToFromTitle>().Where(m => m.Query == "Chris");
为了能够以强类型的方式执行此操作,您必须提供类RavenDB的客户端API可以从中计算出类型。这样的事情会起作用:
session.Query<MessageClassForQuerying, Message_ToFromTitle>().Where(m => m.Query == "Chris");
其中:
public class MessageClassForQuerying : Message {
public string Query { get; set; }
}
但是使用Advanced.LuceneQuery部分是完全可以的。
此外,使用Advanced.LuceneQuery时,您希望使用WhereEquals()或Search(),而不是直接使用Where。你想要利用很多逃避逻辑。