2012-05-04 10 views
5

Aquí está mi consulta:de error con Entity Framework .Any() Filtro

var x = db 
    .Users 
    .Where(u => u.Locations.Any(l => searchedLocation.Counties.Any(c => c.LocationId == l.LocationId)); 

Contexto:

  • Users es IQueryable<User>. (Conjunto de objetos EF)
  • searchedLocation es un objeto Location.
  • Counties es un ICollection<MiniLocation>.

lo que estoy tratando de hacer:

Volver a todos los usuarios, en los que cualquiera de los condados de esos lugares tienen una LocationID de cualquiera de los condados pertenecientes a la ubicación buscada.

Ejemplo:

Búsqueda de la ciudad de Nueva York (LocationID = 1. County1LocationId = 2)

usuario: Bob. Ubicaciones: Soho. County1LocationId = 2. County2 LocationId = 3.

Así que eso es una coincidencia. (Porque Soho tener un condado con una LocationID de 2, y lo mismo ocurre NYC)

error que recibo:

No se puede crear un valor constante de tipo 'xxx.xxx.Locations.MiniLocation' . En este contexto solo se admiten tipos primitivos ('como Int32, String y Guid').

¿Alguna idea?

+0

¿Probaste con .join()? –

Respuesta

1

Este MSDN page indica que este constructo no es compatible. Puede usar this method para .Net 3.5 Linq a entidades para ayudar a reemplazar el uso de Any.

+0

Estoy en .NET 4. De acuerdo, entiendo el error, pero no la solución propuesta en el enlace que proporcionó. ¿Algún otro consejo/ejemplos? – RPM1984

0

Necesita construir una lista de la ubicación ID se puede buscar.

var idsToSearch = "1,2,3,4,5...";  

continuación, puede utilizar Contains de la siguiente manera:

var x = db 
     .Users 
     .Where(u => idsToSearch.Contains(u.LocationId)); 
+0

no creo que sea correcto. antes que nada, '.Contains' solo toma' T' o 'IEnumerable '. En segundo lugar, eso solo coincidiría cuando cualquiera de los condados contiene el ID de ubicación de la ubicación buscada, mientras que quiero que cualquiera de los condados contenga cualquiera de los condados de las ubicaciones buscadas. Complicado, lo sé. :) – RPM1984

+0

Actualizado ........ –

Cuestiones relacionadas