带有未知数量参数的 RavenDB 查询?
RavenDB Query with unknown amount of arguments?
我正在尝试为一个应用程序实现搜索功能,我想进行一个查询,该查询可能包含未知数量的 arguments/search 个术语。
例如,如果我有两个参数,我会喜欢这样的东西。
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();
}
这将 return 所有 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
希望对您有所帮助!
我正在尝试为一个应用程序实现搜索功能,我想进行一个查询,该查询可能包含未知数量的 arguments/search 个术语。
例如,如果我有两个参数,我会喜欢这样的东西。
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();
}
这将 return 所有 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
希望对您有所帮助!