0

我将 EF5 与 .net 4.0 一起使用,并且我有 3 个实体 - 用户、项目和兴趣。我使用FluentAPI连接了 User Many2Many Interest 和 Project Many2Many Interest(它为每个关系创建了额外的 2 个表)。一切都很好。

我想要做的是为每个具有相同兴趣的用户加载所有项目。我试过

Project ... 
  .Where(p => p.Interests
               .Any(t => user.Interests.All(i => i.Url == t.Url))); 

(兴趣有PK Url)。当我执行此查询时,我收到错误

无法创建“DAL.Models.Interest”类型的常量值。此上下文仅支持原始类型或枚举类型。

什么是正确的查询?

4

1 回答 1

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)));
于 2012-10-16T20:52:52.633 回答