我有下面的表,我需要一个查询,它将roleId值分组到一个列表中,并将其放入DTO。示例和预期结果如下表所示。
我知道它不应该是复杂的东西,但我不知道如何…我看了几个例子,我只发现了一些例子,它们处理分组内容的计数,而不是它们的列表。
+----+--------+--------+
| id | userId | roleId |
+----+--------+--------+
| 1 | 1 | 1 |
+----+--------+--------+
| 2 | 1 | 2 |
+----+--------+--------+
| 3 | 2 | 1 |
+----+--------+--------+
public class UserRoleDto
{
public int userId { get; set; }
public List<int> roleIds { get; set; }
}
预期结果:
var res = new List<UserRoleDto>
{
new UserRoleDto()
{
userId = 1,
roleIds = new List<int>() {1, 2}
},
new UserRoleDto()
{
userId = 2,
roleIds = new List<int>() {1}
}
};
假设您已经将连接表映射为模型上的实体,您可以这样做:
using(var db=new YourContext())
{
var res= db.UserRoles.GroupBy(ur=>ur.userId)
.Select(g=>new UserRoleDto()
{
userId = g.Key,
roleIds = g.Select(us=>us.roleId).ToList()
}
).ToList();
}