我正在尝试为应用程序实现搜索功能,我想创建一个可以使用未知数量的参数/搜索项的查询。
例如,如果我有两个论点,我会喜欢这样的。
using (IDocumentSession session = RavenDbConfig.RavenDBDocumentStore.OpenSession())
{
var searchresults = session.Query<Contact>()
.Where(x => x.Firstname.StartsWith("searchArgument1") || x.Firstname.StartsWith("searchArgument2"))
.ToList();
}
等等
那么这可能吗?如果没有,如果你不知道用户想用多少搜索词来搜索某个东西,你会如何处理这个问题?
在枚举查询之前,您可以在查询中附加更多where子句。我认为您必须使用DocumentQuery<>能够做你想做的事(或者可能是Search()功能,不太确定):
using (var session = _documentStore.OpenSession())
{
var query = session.Advanced.DocumentQuery<Contact>()
.WhereStartsWith(x => x.FirstName, "searchArgument1");
if(hasSearchArgument2)
query = query.WhereStartsWith(x => x.FirstName, "searchArgument2");
var contacts = query.ToList();
}
这将返回FirstName以searchArgument1或searchArgument2开头的所有文档。
在上面的例子中执行的Lucene查询看起来像:
{FirstName:searchArgument1* FirstName:searchArgument2*}
阅读有关DocumentQuery<>的更多信息此处:http://ravendb.net/docs/article-page/3.0/csharp/indexes/querying/query-vs-document-query
此外,请阅读有关搜索的内容,因为它可能更适合您的情况:http://ravendb.net/docs/article-page/3.0/csharp/indexes/querying/searching
希望这能有所帮助!