C# 实体框架核心:请求复合表(复合键)
你好!我为我的模型创建了一个组合键ProjectSubProject:Project和SubProject。我在创建GetAllProjects请求时遇到问题,我想获取一个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)
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:我添加了有问题的图片