RavenDB - 可选的where子句

ind*_*rad 8 c# ravendb

我想编写一个RavenDB查询,如果它可用,则按值过滤,但如果该值不可用,我希望它返回所有对象.例如,在linq到对象中,我可以这样做:

var matches = people.Where(x => x.LastName == userEntry || userEntry == string.Empty).ToList();
Run Code Online (Sandbox Code Playgroud)

但以下方法不起作用:

var matches = RavenSession.Query<Person>().Where(x => x.LastName == userEntry || userEntry == string.Empty).ToList();
Run Code Online (Sandbox Code Playgroud)

因为userEntry它不是索引值,所以会引发异常.

我怎么能做到这一点?

Jim*_*lla 9

根据您对多个可选谓词的评论,您应该可以执行以下操作:

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();
Run Code Online (Sandbox Code Playgroud)