【问题标题】:LINQ for 3 tables - new to LINQ3 个表的 LINQ - LINQ 的新手
【发布时间】:2016-10-04 23:20:35
【问题描述】:

我有 3 张桌子

用户 - 用户 ID、名字、姓氏等

角色 - RoleId、RoleName

功能 - UserId、RoleId

我想使用 LINQ 显示具有共同特征的用户

请帮忙

【问题讨论】:

  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见How to Ask

标签: linq lambda entity-framework-6


【解决方案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)

【讨论】:

    【解决方案2】:
    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}
    

    【讨论】:

    • 感谢托尼的及时回复。我认为这将返回所有用户及其功能。我想看看用户和功能是否有共同的特点,比如用户 1 是角色 1,用户 2 是角色 1。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多