我正在使用带有.net 4.0的EF5,我有3个实体 - 用户,项目和兴趣。我使用FluentAPI连接了用户 Many2Many 兴趣和项目 Many2Many 兴趣(它为每个关系创建了额外的2个表)。一切都很好。
我想要做的是为每个具有相同兴趣的用户加载所有项目。我试过了
Project ...
.Where(p => p.Interests
.Any(t => user.Interests.All(i => i.Url == t.Url)));
(兴趣有PK Url)。当我执行此查询时,出现错误
无法创建“DAL.Models.Interest”类型的常量值。在此上下文中仅支持原始类型或枚举类型。
什么是正确的查询?
答案 0 :(得分:0)
问题是您无法将user.Interests.All(...)转换为SQL过程。
但是,您可以创建基本类型(Url)的列表,然后与之进行比较。
var userInterests = user.Interests.Select(u => u.Url);
var sharedProjects = m.Projects.Where( p => p.Interests.Select(i => i.Url)
.Any(pi => userInterests.Any(ui => ui == pi)));