9

我想编写一个 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不是索引值,所以这会引发异常。

我怎样才能做到这一点?

4

1 回答 1

10

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

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();
于 2012-06-25T19:47:39.047 回答