具有未知数量参数的RavenDB查询?

时间:2015-03-19 14:44:46

标签: c# ravendb

我正在尝试为应用程序实现搜索功能,并且我想制作一个可能需要未知数量的参数/搜索词的查询。

例如,如果我有两个论点,我喜欢这样的事情。

            using (IDocumentSession session = RavenDbConfig.RavenDBDocumentStore.OpenSession())
        {

                var searchresults = session.Query<Contact>()
                    .Where(x => x.Firstname.StartsWith("searchArgument1") || x.Firstname.StartsWith("searchArgument2"))
                    .ToList();
        }

......等等。

这可能吗?如果没有,如果您不知道用户想要搜索多少搜索字词,您将如何解决问题?

1 个答案:

答案 0 :(得分:1)

在枚举之前,您可以在查询中附加更多where子句。我认为你必须使用DocumentQuery&lt;&gt;能够做你想要的(或者可能是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();
}

这将返回所有带有以SearchArgument1或searchArgument2开头的FirstName的文档。

在上面的示例中执行的Lucene查询如下所示:

{FirstName:searchArgument1* FirstName:searchArgument2*}

详细了解DocumentQuery&lt;&gt;在这里: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

希望这有帮助!