LINQ for 3 tables - LINQ的新功能

时间:2016-10-04 23:20:35

标签: linq lambda entity-framework-6

我有3张桌子

  

用户 - UserID,名字,姓氏等

     

角色 - RoleId,RoleName

     

功能 - UserId,RoleId

我想使用LINQ

显示具有共同功能的用户

请帮忙

2 个答案:

答案 0 :(得分:1)

你可以尝试查找:

//Associate the role names with the features
var featureRoles = dbContext.Roles.Join(dbContext.Features,
                       role => role.RoleId,
                       feature => feature.RoleId,
                       (role, feature) => new {
                                                RoleId = feature.RoleId,
                                                UserId = feature.UserId,
                                                RoleName = role.RoleName
                                               });

//Create ILookup
var lookup = dbContext.Users.Join(featureRoles,
                       user => user.UserID,
                       fr => fr.UserId,
                       (user, fr) => new {
                                           User = user,
                                           RoleName = fr.RoleName,
                                           RoleId = fr.RoleId
                                         })
                      .ToLookup(r => r.RoleName, s => s.User);

这将按用户的角色名称对用户进行排序,例如:

var users = lookup["role 1"];
foreach(var user in users)
{ 
    Console.WriteLine("Users in Role 1:");
    Console.WriteLine("\t{0} {1}", user.Firstname, user.Lastname);  
}

Output:
"Users in Role 1:"
         "John Smith"
         "Foo Bar"
         ...

如果您想要使用角色ID而不是名称进行搜索,则需要将查找定义更改为.ToLookup(r=> r.RoleId, s=> s.User)

答案 1 :(得分:0)

from u in Users
join f in Features on u.UserId equals f.UserId
join r in Roles on r.RoleId equals f.RoleId
where f.RoleId == 1
select new { u.FirstName,u.LastName,r.RoleName}