如何使用 EF6 的 group by 从表中查询?

Say*_*ndo 3 c# linq entity-framework

我有下表,我需要一个查询,将 roleId 值分组到一个列表中并将其放入 DTO 中。示例和预期结果如下表所示。

我知道它不应该是复杂的东西,但我不知道如何......我浏览了一些示例,我只找到了它们处理分组内容的计数而不是它们的列表的示例。

+----+--------+--------+
| id | userId | roleId |
+----+--------+--------+
|  1 | 1      |    1   |
+----+--------+--------+
|  2 | 1      |    2   |
+----+--------+--------+
| 3  |  2     |    1   |
+----+--------+--------+
Run Code Online (Sandbox Code Playgroud)
public class UserRoleDto
    {
        public int userId { get; set; }

        public List<int> roleIds { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

预期结果:

var res = new List<UserRoleDto>
            {
                new UserRoleDto()
                {
                    userId = 1,
                    roleIds = new List<int>() {1, 2}
                },
                new UserRoleDto()
                {
                    userId = 2,
                    roleIds = new List<int>() {1}
                }
            };
Run Code Online (Sandbox Code Playgroud)

oct*_*ccl 6

假设您已将联结表映射为模型上的实体,您可以执行以下操作:

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();
}
Run Code Online (Sandbox Code Playgroud)