2011-08-15 57 views
11

我有一组域模型namedescusers(属于该组)收集LINQ到实体EF4

我试图让特定用户所属的所有组。这是我的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; 

我收到以下错误,当我尝试执行查询

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

任何帮助是appreciated.Thanks!

+0

为什么不放弃最后一个Contains子句并将其包装到您的选择? – Rig

+0

钻机,你能告诉我这个查询的样子吗? – Lavan

回答

14

删除用户对象的空测试,无论如何它是懒加载的,是您的用户虚拟?如果是,它是惰性加载,可以删除空测试然后

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

Michael,它会抛出相同的错误 – Lavan

+0

Michael,删除实际工作的空测试。 – Lavan

+0

你有没有尝试删除'p.Users!= null'? –

0

难道你不能走相反的路吗?

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

希望这会有所帮助。

+0

谢谢安东尼,但我不允许改变现有的模型。 – Lavan