RavenDB - 可选的where子句

时间:2012-06-25 18:50:30

标签: c# ravendb

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

我该如何做到这一点?

1 个答案:

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