我第一次尝试使用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"
所以一般的问题是:如何轻松地创建一个将两个集合中的数据结合起来的集合?
答案 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