[英]Entity Framework Core: Request for Composite Table (Composite Key)
I. Hi! I.嗨! I create a composite key ProjectSubProject for my models: Project and SubProject .
我为我的模型创建一个组合键ProjectSubProject : Project和SubProject 。 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>>>
,不需要Include
或Select
。 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表示中,您可以将结果投影为具有
Project
和SubProjects
属性的一些特殊或匿名类型的枚举。 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.