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!=空