C# 如何在EF6中使用GROUPBY从表中查询?

C# 如何在EF6中使用GROUPBY从表中查询?,c#,linq,entity-framework,C#,Linq,Entity Framework,我有下表,我需要一个查询,将roleId值分组到一个列表中,并将其放入DTO。示例和预期结果如下表所示 我知道它不应该是复杂的东西,但我不知道如何。。。我看了几个例子,我只找到了一些例子,它们处理的是分组内容的计数,而不是它们的列表 +----+--------+--------+ | id | userId | roleId | +----+--------+--------+ | 1 | 1 | 1 | +----+--------+--------+ | 2 | 1

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

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

+----+--------+--------+
| id | userId | roleId |
+----+--------+--------+
|  1 | 1      |    1   |
+----+--------+--------+
|  2 | 1      |    2   |
+----+--------+--------+
| 3  |  2     |    1   |
+----+--------+--------+
public类UserRoleDto
{
public int userId{get;set;}
公共列表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}
                }
            };
var res=新列表
{
新UserRoleDto()
{
userId=1,
roleIds=新列表(){1,2}
},
新UserRoleDto()
{
userId=2,
roleIds=新列表(){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();
}

杰出的非常感谢你!select中的roleIds部分丢失。
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();
}