C# 实体框架核心:请求复合表(复合键)

C# 实体框架核心:请求复合表(复合键),c#,entity-framework,linq,entity-framework-6,entity-framework-core,C#,Entity Framework,Linq,Entity Framework 6,Entity Framework Core,你好!我为我的模型创建了一个组合键ProjectSubProject:Project和SubProject。我在创建GetAllProjects请求时遇到问题,我想获取一个 i分组或i词典结构,但我得到了i分组 这是我的要求: return _context.ProjectSubProjects .Include(ps => ps.Project) .Include(ps => ps.SubProject)

你好!我为我的模型创建了一个组合键ProjectSubProjectProjectSubProject。我在创建GetAllProjects请求时遇到问题,我想获取一个

i分组或i词典
结构,但我得到了
i分组

这是我的要求:

return _context.ProjectSubProjects
                .Include(ps => ps.Project)
                .Include(ps => ps.SubProject)
                .Select(ps => new GetAllProjectsViewModel
                {
                    Project = ps.Project,
                    SubProject = ps.SubProject,
                })
                .GroupBy(ps => ps.Project);
Project.cs:

public class Project
    {
        // PK
        public int Id { get; set; }

        public string ProjectName { get; set; }

    }
public class SubProject
    {
        // PK
        public int Id { get; set; }

        public string SubProjectName { get; set; }
    }
子项目。cs:

public class Project
    {
        // PK
        public int Id { get; set; }

        public string ProjectName { get; set; }

    }
public class SubProject
    {
        // PK
        public int Id { get; set; }

        public string SubProjectName { get; set; }
    }
ProjectSubProject.cs

public class ProjectSubProject
    {
        // PK
        public int ProjectId { get; set; }
        public Project Project { get; set; }

        // PK
        public int SubProjectId { get; set; }
        public SubProject SubProject { get; set; }
    }

要从您的模型中获取
IEnumerable
,不需要
包含
选择
。您只需使用方法重载即可传递元素选择器:

return _context.ProjectSubProjects
    .GroupBy(ps => ps.Project, ps => ps.SubProject);
更新:为了在Json表示中包含项目信息,可以将结果投影到具有
项目
子项目
属性的某些特殊或匿名类型的可枚举项。大概是这样的:

return _context.ProjectSubProjects
    .GroupBy(ps => ps.Project, ps => ps.SubProject)
    .Select(g => new { Project = g.Key, SubProjects = g });

因为您选择的是
GetAllProjectsViewModel
,所以我需要
包括这个,因为我在我的应用程序中返回值。这是WebApi方法。如果我像上面那样做,我会得到
i分组
这里的
Include
没有任何意义(不管这是什么类型的方法)<代码>包含
用于将相关数据加载到实体中。但您根本不会返回
projectsubject
实体的实例,因此也不会加载相关数据。整个结果是通过
GroupBy
查询生成的。是的,谢谢,我尝试获取值,所有结果都很好。感谢您的描述,但我有一个问题,我得到了数据,但没有关于项目的信息,只有id,如果我添加了ProjectName或其他内容,GroupBy将其替换为id:我添加了有问题的图片