C# RavenDB-使用或筛选器构建动态查询

C# RavenDB-使用或筛选器构建动态查询,c#,linq,ravendb,C#,Linq,Ravendb,我需要能够在运行时构建一个使用或语句的查询。如果我使用下面的方法来构建查询,那么所有内容都是和在一起的。我真的需要每个筛选器值都是或,以便此查询正常工作 public class IdAndRole { public string Id {get;set;} public string Role {get;set;} } var idAndRoles = session.Query<IdAndRole, Roles_ById>(); foreach(var filt

我需要能够在运行时构建一个使用或语句的查询。如果我使用下面的方法来构建查询,那么所有内容都是和在一起的。我真的需要每个筛选器值都是或,以便此查询正常工作

public class IdAndRole
{
    public string Id {get;set;}
    public string Role {get;set;}
}

var idAndRoles = session.Query<IdAndRole, Roles_ById>();
foreach(var filter in filterValues)
{
    idAndRoles = idAndRoles.Where(x => x.In(filter.Id) && x.In(filter.Role));
}

您应该能够使用来构造查询

var predicate = PredicateBuilder.False<IdAndRole>();
foreach (var filter in filterValues)
{
     predicate = predicate.Or( x => x.In(filter.Id) && x.In(filter.Role) );
}

var idAndRoles = session.Query<IdAndRole,Roles_byId>()
                        .Where( predicate );
var predicate=PredicateBuilder.False();
foreach(filterValues中的var筛选器)
{
predicate=predicate.Or(x=>x.In(filter.Id)和&x.In(filter.Role));
}
var idAndRoles=session.Query()
.Where(谓语);
菲尔,
您可以下拉到LuceneQuery中,这允许您对查询进行细粒度的控制。

这是特定于RavenDB Linq提供程序的。谓词生成器在中不存在RavenDB@Phil-不,但你可以找到来源。它构建了一个应该可以正常工作的表达式。在我的一个RavenDB项目中,我正在使用一些类似的技术来构建表达式。
var predicate = PredicateBuilder.False<IdAndRole>();
foreach (var filter in filterValues)
{
     predicate = predicate.Or( x => x.In(filter.Id) && x.In(filter.Role) );
}

var idAndRoles = session.Query<IdAndRole,Roles_byId>()
                        .Where( predicate );