RavenDB-необязательное предложение where
Я хочу написать запрос RavenDB, который фильтруется значением, если оно доступно, но если это значение недоступно, я хочу, чтобы он вернул все объекты. Например, в linq to objects я могу сделать что-то вроде этого:
var matches = people.Where(x => x.LastName == userEntry || userEntry == string.Empty).ToList();
но следующее не будет работать:
var matches = RavenSession.Query<Person>().Where(x => x.LastName == userEntry || userEntry == string.Empty).ToList();
, потому что userEntry
не является индексированным значением, это создает исключение.
как я могу это сделать?
1 ответов
основываясь на вашем комментарии о нескольких необязательных предикатах, вы должны иметь возможность сделать что-то вроде этого:
var where = new List<Expression<Func<Person, bool>>>();
if (!string.IsNullOrWhitespace(lastName))
where.Add(p => p.LastName == lastName);
if (!string.IsNullOrWhitespace(firstName))
where.Add(p => p.FirstName == firstName);
// etc...
var query = session.Query<Person>();
foreach (var clause in where)
query = query.Where(clause);
var results = query.ToList();