RavenDB查询,参数数量未知



我正在尝试为应用程序实现搜索功能,我想创建一个可以使用未知数量的参数/搜索项的查询。

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

            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

希望这能有所帮助!

最新更新