使用EF构建多对多查询

时间:2012-10-16 17:05:05

标签: sql-server entity-framework

我正在使用带有.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”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

什么是正确的查询?

1 个答案:

答案 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)));
相关问题