C# Linq到实体EF4

C# Linq到实体EF4,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个组域模型,其中包含名称,描述和用户集合(属于该组) 我正在尝试获取特定用户所属的所有组。这是我的LinQ声明: var results = from p in AuthorizationService.UnitOfWork.Groups.FindAll() where (p.Users != null && p.Users.Select(u => u.Id

我有一个组域模型,其中包含
名称
描述
用户集合
(属于该组)

我正在尝试获取特定用户所属的所有组。这是我的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.

感谢您的帮助,谢谢

你不能走相反的路吗

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

希望这能有所帮助。

删除对用户对象的空测试,不管它是延迟加载的,您的用户是虚拟的吗?如果是,它是延迟加载的,那么可以删除空测试

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

为什么不删除最后一个Contains子句并将其包装到您的select?装备中,您能告诉我查询是什么样子吗?谢谢anton,但我不允许更改现有模型。可以删除空测试。我们正在编写的Linq到实体(不是Linq到对象)只是转换为字符串。EF在对象比较方面不是很聪明。例如,此Linq在NHibernate中是允许的:
from p in person,其中p!=null
,它会自动从p.Id不为null的person中转换为
select*
,而EF Linq要求您将事物向下比较到它们的原始类型,因此您必须从p.Id!=空