我想编写一个RavenDB查询,如果它可用,则按值过滤,但如果该值不可用,我希望它返回所有对象。例如,在linq到对象中,我可以这样做:
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
不是索引值,所以会引发异常。
我该如何做到这一点?
答案 0 :(得分: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();