9

値が使用可能な場合は値でフィルタリングする 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、例外がスローされます。

どうすればこれを達成できますか?

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 に答える