RavenDB - Построить динамический запрос с фильтрами OR - PullRequest
3 голосов
/ 20 марта 2012

Мне нужно иметь возможность строить запрос во время выполнения, использующий операторы 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)

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Вы должны иметь возможность использовать 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 );
2 голосов
/ 20 марта 2012

Фил, Вы можете перейти в LuceneQuery, и это позволит вам детально контролировать ваш запрос.

...