2011-08-15 21 views
11

que tienen un modelo de dominio con grupos name, desc y recogida de users (perteneciente al grupo)LINQ a Entidades EF4

que estoy tratando de conseguir todos los grupos que un usuario en particular pertenece. Esta es mi declaración LinQ:

var results = from p in AuthorizationService.UnitOfWork.Groups.FindAll() 
          where 
           (p.Users != null && p.Users.Select(u => u.Id).Contains(CurrentUser.Id)) 
          select p.Name; 

me sale el siguiente error al intentar ejecutar la consulta

Cannot compare elements of type 'System.Collections.Generic.ICollection`1'. Only primitive types (such as Int32, String, and Guid) and entity types are supported. 

Cualquier ayuda es aprecie!

+0

¿Por qué no soltar esa última cláusula de Contiene y ajustar eso en su selección? – Rig

+0

plataforma, ¿me puede mostrar cómo sería la consulta? – Lavan

Respuesta

14

Elimine la prueba nula para el objeto Usuarios, de todos modos, está cargada de forma diferida, ¿sus usuarios son virtuales? si es así, está cargado de forma diferida, está bien quitar la prueba nula luego

var results = 
from p in AuthorizationService.UnitOfWork.Groups.FindAll() 
where 
    p.Users.Any(u => u.Id == CurrentUser.Id) 
select p.Name; 
+0

Michael, arroja el mismo error – Lavan

+0

Michael, Eliminar las pruebas nulas realmente funcionó. – Lavan

+0

¿Has intentado eliminar 'p.Users! = Null'? –

0

¿No puedes ir por el camino opuesto?

var results = AuthorizationService.UnitOfWork.Users.Include("Groups").First(u => u.ID == CurrentUser.Id).Select(u => u.Groups); 

Espero que esto ayude.

+0

gracias anton, pero no puedo cambiar el modelo existente. – Lavan