Linq to Entities EF4

Lav*_*van 11 c# linq entity-framework

我有一个组域模型name,descusers(属于该组)的集合

我试图获取特定用户所属的所有组.这是我的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;
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助表示赞赏.谢谢!

Mic*_*uen 14

删除Users对象的null测试,无论如何它是延迟加载的,你的用户是虚拟的吗?如果是,它是延迟加载的,那么可以删除null测试

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

  • 可以删除null测试.Linq to Entities(不是Linq to objects)我们正在编写的只是被翻译成字符串.EF在对象比较方面并不那么聪明.例如,这个Linq在NHibernate中被允许:`从p in person p!= null`,它自动被翻译为`select*from person,其中p.Id不为null`,而EF Linq要求你把它们比作他们的原始类型,所以你必须在p.Id!= null`中编写`from p (2认同)