2011-10-26 61 views
30

我的實體是:RavenDB:如何使用多個搜索字詞查詢

class Resource 
{ 
    string Name; 
    string EmployeeId; 
} 

如何查詢多個僱員的資源呢?我試過這個:

Resource[] FindResourcesByEmployees(string[] employeeIds) 
{ 
    return this.Session.Query<Resource>() 
     .Where(r => employeeIds.Contains(r.EmployeeId)) 
     .ToArray(); 
} 

但是,這給了我NotSupportedException:方法不支持:包含。然後我嘗試以下方法:

Resource[] FindResourcesByEmployees(string[] employeeIds) 
{ 
    return this.Session.Query<Resource>() 
     .Where(r => employeeIds.Any(v => v == r.EmployeeId)) 
     .ToArray(); 
} 

這引發NotSupportedException:不支持表達式類型:System.Linq.Expressions.TypedParameterException。

在SQL它會是這樣的:

SELECT * FROM resource WHERE employeeid IN (1, 2, 3) 

我的問題是,我該如何執行RavenDB此查詢?

+0

這篇文章也許能幫助您http://stackoverflow.com/questions/4207739/linq-query-with-multiple-contains-any-for-ravendb – JonVD

+1

不,這種情況下,實體本身包含一個集合。在我的情況下,只有查詢包含一個集合,而實體不包含集合。 –

回答

64

您可以使用In運算符。如果我沒有記錯你的代碼應該是這樣的:

using Raven.Client.Linq; 

Resource[] FindResourcesByEmployees(string[] employeeIds) 
{ 
    return this.Session.Query<Resource>() 
     .Where(r => r.EmployeeId.In<string>(employeeIds))) 
     .ToArray(); 
} 
+0

工程就像一個魅力,謝謝! –

+22

還有一件事:.In <> - 擴展方法需要「使用Raven.Client.Linq」 –