繁体   English   中英

如何使用 LINQ 查询来展平 SQL 与集合的连接?

[英]How to flatten an SQL join with collection using LINQ query?

假设我有两个表:Users 和 UserRoles:

Users:
+----+
| Id |
+----+
|  1 |
|  2 |
|  3 |
+----+

UserRoles:
+--------+----------+
| UserId | Name     |
+--------+----------+
|      1 | A        |
|      1 | B        |
|      2 | A        |
|      3 | C        |
+--------+----------+

我需要能够将 select 上面的数据转换成如下所示的用户对象列表:

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();

有没有更好(更高效)的方法来实现这一点? 例如加入,我在想这样的事情,但不知道如何从加入中填充角色:

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();

谢谢。

使用GroupJoin LINQ 到 SQL 方法:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM