带有未知数量参数的 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

希望对您有所帮助!