简体   繁体   English

实体框架核心:组合表请求(组合键)

[英]Entity Framework Core: Request for Composite Table (Composite Key)

I. Hi! I.嗨! I create a composite key ProjectSubProject for my models: Project and SubProject . 我为我的模型创建一个组合键ProjectSubProjectProjectSubProject I have a problem with create GetAllProjects request, i want to get a 我在创建GetAllProjects请求时遇到问题,我想获取一个

IGrouping<Project, IEnumerable<SubProject>> or IDictionary structure, but i get IGrouping<Project, IEnumerable<GetAllProjectsViewModel>> IGrouping<Project, IEnumerable<SubProject>> or IDictionary结构,但我得到IGrouping<Project, IEnumerable<GetAllProjectsViewModel>>

Here is my request: 这是我的要求:

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: Project.cs:

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

        public string ProjectName { get; set; }

    }

SubProject.cs: SubProject.cs:

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

        public string SubProjectName { get; set; }
    }

ProjectSubProject.cs 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; }
    }

在此处输入图片说明

To get IEnumerable<IGrouping<Project, IEnumerable<SubProject>>> from your model, no Include or Select is needed. 要从模型中获取IEnumerable<IGrouping<Project, IEnumerable<SubProject>>> ,不需要IncludeSelect You can simply use the GroupBy method overload which allows you to pass element selector: 您可以简单地使用GroupBy方法重载,它允许您传递元素选择器:

return _context.ProjectSubProjects
    .GroupBy(ps => ps.Project, ps => ps.SubProject);

Update: In order to include the project information in the Json representation, you could project the result to enumerable of some special or anonymous type having Project and SubProjects properties. 更新:为了将项目信息包含在Json表示中,您可以将结果投影为具有ProjectSubProjects属性的一些特殊或匿名类型的枚举。 Something like this: 像这样:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM