c# - .NetCore 查询 - 连接多对多表并返回结果并包含带有字符串数组的键
问题描述
拜托,在使用 .netCore 时,我在处理多对多关系时遇到了一些挑战。我有这个案例;一个用户可以属于多个部门,一个部门可以有多个用户。最初,我在实现多对多关系时遇到了一些挑战。但经过大量研究,我能够得到解决方案。现在,加入表格以获取所有将管理作为其部门一部分的用户。我对如何在查询时将用户部门放入自己的数组感到有些困惑
这是我到目前为止的课程
// User Class
public class User
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<UserDepartment> UserDepartments { get; set; }
}
// Department Class
public class Department
{
public int Id { get; set; }
public string DepartmentName { get; set; }
public virtual ICollection<UserDepartment> UserDepartments { get; set; }
}
// UserDepartment Class (Intermediary Table)
public class UserDepartment
{
public long UserId { get; set; }
public int DepartmentId { get; set; }
public User User { get; set; }
public Department Department { get; set; }
}
这是我的愿望输出;
[
{
"userId": 1,
"fName": "John",
"lName": "Doe",
"depts": ["Administration"]
},
{
"userId": 2,
"fName": "Simon",
"lName": "Simpson",
"depts": ["Administration", "Support"]
},
]
这是我自己尝试的查询
public async Task<IEnumerable<object>> Test()
{
var result = await _context.Users
.Select(p => new
{
UserId = p.Id,
FName = p.FirstName,
LName = p.LastName,
Depts = //TODO - To fix getting user depts p.UserDepartments.Any(d => d.Department.DepartmentName == "Administration")
}).ToListAsync();
return result;
}
解决方案
您可以使用 .net 核心中提供的 include 方法来修复获取用户部门,就像这样:
public async Task<IEnumerable<object>> Test()
{
var result = await _context.Users.Include(s => s.UserDepartments).ThenInclude(n => n.Department).Select(p => new
{
UserId = p.Id,
FName = p.FirstName,
LName = p.LastName,
Depts = p.UserDepartments.Select(s=>s.Department).Select(k => k.DepartmentName)
}).ToListAsync();
return result;
}
推荐阅读
- javascript - 当 div 在视口中时加载 Javascript
- visual-studio-2019 - 项目发布时忽略 MsDeploySkipRules
- github - 我重命名了我的存储库,但我无法更新我的文件
- scala - Spark scala 使用 Seq(paths) 从 S3 读取多个文件
- sql-server - 如何在我的存储过程中返回从链接器服务器数据库中使用的表列表
- css - 检查表格单元格并为其着色
- actions-on-google - 具有外部端点 (API) 的 Google Action 在 Actions Console Simulator 上工作但未部署的原因可能是什么?
- python - 如何允许使用 Python 中的请求将函数参数传递到 cURL 请求中
- c# - 在 WPF 中将全局值传递给 DateTemplate
- html - 角材料表组件不显示数据