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

30

我的实体是:

class Resource
{
    string Name;
    string EmployeeId;
}

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

Resource[] FindResourcesByEmployees(string[] employeeIds)
{
    return this.Session.Query<Resource>()
        .Where(r => employeeIds.Contains(r.EmployeeId))
        .ToArray();
}

然而,这给我带来了NotSupportedException: Method not supported: Contains。然后我尝试了以下方法:

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中执行这个查询?


这篇文章可能会对你有所帮助:https://dev59.com/B2855IYBdhLWcg3wq2bL - JonVD
1
不,那种情况与包含集合的实体本身有关。而我这种情况下只有查询包含了一个集合,而实体本身并不包含任何集合。 - K Ronning
1个回答

65

您可以使用 In 运算符。如果我记得清楚,您的代码应该看起来像这样:

using Raven.Client.Linq;

Resource[] FindResourcesByEmployees(string[] employeeIds)
{
    return this.Session.Query<Resource>()
        .Where(r => r.EmployeeId.In<string>(employeeIds)))
        .ToArray();
}

22
还有一件事:使用.In<>扩展方法需要添加 "using Raven.Client.Linq"。 - K Ronning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接