如何通过合并两个集合中的数据来创建一个集合?

时间:2020-07-06 11:30:45

标签: c# sql linq

我第一次尝试使用SQL进行数据库尝试。我希望数据库保存一个用户表。每个用户具有用户名,名字,姓氏等属性,但也具有角色。该角色与用户表中的外键相关。

List<User>users = new List<User>()
users.add(UserId = 1, UserName = "John" UserRoleId=1);
users.add(UserId = 2, UserName = "Luke" UserRoleId=2);
users.add(UserId = 3, UserName = "Marc" UserRoleId=3);
users.add(UserId = 4, UserName = "Mathew" UserRoleId=3);

List<UserRole>userRoles = new <UserRole>userRoles();
userRoles.add(UserRoleId = 1 , UserRole = "Admin");
userRoles.add(UserRoleId = 2 , UserRole = "Project Manager");
userRoles.add(UserRoleId = 3 , UserRole = "Planner");

我想创建一个名为displayUser的对象的新列表,其中包含UserRole。 因此结果应类似于。

UserId=1, UserName = "John", UserRole = "Admin"
UserId=2, UserName = "Luke", UserRole = "Project Manager"
UserId=3, UserName = "Marc", UserRole = "Planner"
UserId=4, UserName = "Mathew", UserRole = "Planner"

所以一般的问题是:如何轻松地创建一个将两个集合中的数据结合起来的集合?

2 个答案:

答案 0 :(得分:1)

join个表并从两个表中创建一个投影。

var q = from u in users
        join r in userRoles on u.UserRoleId equals r.UserRoleId 
        select new { u.UserId, u.UserName, r.UserRole };

如果用户有多个角色,并且您想要每个用户的角色集合,则可以使用GroupJoin

答案 1 :(得分:1)

您可以将LINQ与这样的联接一起使用:

List<User> users = new List<User>();

users.Add(new User { UserId = 1, UserName = "John", UserRoleId = 1 });
users.Add(new User { UserId = 2, UserName = "Luke", UserRoleId = 2 });
users.Add(new User { UserId = 3, UserName = "Marc", UserRoleId = 3 });
users.Add(new User { UserId = 4, UserName = "Mathew", UserRoleId = 3 });

List<UserRole> userRoles = new List<UserRole>();

userRoles.Add(new UserRole { UserRoleId = 1, UserRoleName = "Admin" });
userRoles.Add(new UserRole { UserRoleId = 2, UserRoleName = "Project Manager" });
userRoles.Add(new UserRole { UserRoleId = 3, UserRoleName = "Planner" });

var result = from user in users
             join userRole in userRoles on user.UserRoleId equals userRole.UserRoleId
             select new
             {
               user.UserId,
               user.UserName,
               userRole.UserRoleName
             };

foreach ( var item in result )
  Console.WriteLine($"{item.UserId}, {item.UserName}, {item.UserRoleName}");

它从两个由角色ID连接的列表中选择项目,并根据需要创建新的命名和键入项目。

结果查询可以通过以下方式转换为List<(int, string, string)>

var list = result.ToList();

输出

1, John, Admin
2, Luke, Project Manager
3, Marc, Planner
4, Mathew, Planner
相关问题