我需要能够在运行时使用OR语句构建查询。如果我使用下面的方法来构建查询,那么一切都是AND。我确实需要每个过滤器值为OR才能使此查询正常工作。
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));
}
伪代码:
(filter[0].Id == value1 && filter[0].Role == role1) ||(filter[1].Id == value2 && filter[1].Role == role2)
答案 0 :(得分:5)
您应该可以使用PredicateBuilder来构建查询。
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 );
答案 1 :(得分:2)
菲尔 您可以直接进入LuceneQuery,这样您就可以对查询进行细致的控制。