2011-10-26 10 views
30

Mi entidad es:RavenDB: Cómo realizar consultas con varios términos de búsqueda

class Resource 
{ 
    string Name; 
    string EmployeeId; 
} 

¿Cómo de consulta para los recursos de varios empleados? Intenté esto:

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

Sin embargo, eso me da NotSupportedException: Método no admitido: Contiene. Luego probé el siguiente método:

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

que arroja NotSupportedException: Tipo de expresión no es compatible: System.Linq.Expressions.TypedParameterException.

En SQL sería algo así como:

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

Mi pregunta es, ¿Cómo se realiza esta consulta en RavenDB?

+0

Este post puede ayudar a salir http://stackoverflow.com/questions/4207739/linq-query-with-multiple-contains-any-for-ravendb – JonVD

+1

No, ese caso se refiere a la entidad misma que contiene una colección. En mi caso, solo la consulta contiene una colección, mientras que la entidad no contiene colecciones. –

Respuesta

64

Puede usar el operador In. Si no recuerdo mal el código debería tener este aspecto:

using Raven.Client.Linq; 

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

¡Funciona como un amuleto, gracias! –

+22

Una cosa más: el método de extensión .In <> requiere "usar Raven.Client.Linq" –

Cuestiones relacionadas