如何使用EF6从组中查询表?

时间:2015-05-30 14:11:24

标签: c# linq entity-framework

我有下表,我需要一个查询,将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}
                }
            };

1 个答案:

答案 0 :(得分: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();
}