如何使用LINQ查询平整带有集合的SQL连接?

问题描述 投票:0回答:1

假设我有两个表: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();

谢谢。

c# linq linq-to-sql linq-to-entities
1个回答
1
投票
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();
© www.soinside.com 2019 - 2024. All rights reserved.