RavenDB:如何使用多个搜索词进行查询

Posted

技术标签:

【中文标题】RavenDB:如何使用多个搜索词进行查询【英文标题】:RavenDB: How to query with multiple search terms 【发布时间】:2011-10-26 07:43:22 【问题描述】:

我的实体是:

class Resource

    string Name;
    string EmployeeId;

如何查询多个员工的资源?我试过这个:

Resource[] FindResourcesByEmployees(string[] employeeIds)

    return this.Session.Query<Resource>()
        .Where(r => employeeIds.Contains(r.EmployeeId))
        .ToArray();

但是,这给了我 NotSupportedException:不支持的方法:包含。然后我尝试了以下方法:

Resource[] FindResourcesByEmployees(string[] employeeIds)

    return this.Session.Query<Resource>()
        .Where(r => employeeIds.Any(v => v == r.EmployeeId))
        .ToArray();

引发 NotSupportedException:不支持表达式类型:System.Linq.Expressions.TypedParameterException。

在 SQL 中会是这样的:

SELECT * FROM resource WHERE employeeid IN (1, 2, 3)

我的问题是,如何在 RavenDB 中执行此查询?

【问题讨论】:

这篇文章可能对你有所帮助***.com/questions/4207739/… 不,这种情况是关于实体本身包含一个集合。在我的例子中,只有查询包含一个集合,而实体不包含集合。 【参考方案1】:

您可以使用In 运算符。如果我没记错的话,你的代码应该是这样的:

using Raven.Client.Linq;

Resource[] FindResourcesByEmployees(string[] employeeIds)

    return this.Session.Query<Resource>()
        .Where(r => r.EmployeeId.In<string>(employeeIds)))
        .ToArray();

【讨论】:

还有一点:.In-extension 方法需要“使用 Raven.Client.Linq”

以上是关于RavenDB:如何使用多个搜索词进行查询的主要内容,如果未能解决你的问题,请参考以下文章

如何先按搜索词排序查询结果,然后按字母顺序?

我可以在 RavenDB 中使用构造函数重载吗?

ES方法使用注意

如何创建返回字符串列表的 RavenDB 索引?

关于Lucene怎么使用SpanQuery进行模糊搜索

使用多个搜索词进行搜索