假设我有两个表:Users和UserRoles:
Users:
+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
+----+
UserRoles:
+--------+----------+
| UserId | Name |
+--------+----------+
| 1 | A |
| 1 | B |
| 2 | A |
| 3 | C |
+--------+----------+
我需要能够将上面的数据选择成如下所示的User对象列表:
class User
{
public int Id { get; set; }
public List<string> Roles { get; set; }
}
我能想到的最好的是以下内容,但最终会生成一个嵌套的select语句,我不知道这是否会损害性能:
List<Device> usersWithRoles = from user in Users
select new Device
{
Id = user.Id,
Roles = (from role in UserRoles where role.UserId == user.Id select role.Name).ToList()
}.ToList();
是否有更好的(性能更高的方法)完成此任务?例如,对于join,我在想这样的事情,但不知道如何从联接中填充角色:
List<Device> usersWithRoles = from user in Users
join user_role in UserRoles on user.Id equals user_role.UserId
select new Device
{
Id = user.Id,
Roles = ??? // how do I populate this
}.ToList();
谢谢。
List<Device> usersWithRoles = from user in Users
join user_role in UserRoles on user.Id equals user_role.UserId into roles
select new Device
{
Id = user.Id,
Roles = roles.ToList()
}.ToList();