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();