【问题标题】:A LINQ query for corresponding SQL query对应 SQL 查询的 LINQ 查询
【发布时间】:2012-07-03 21:13:49
【问题描述】:

Basicall 我有三个具有多对多关系的表用户角色和用户角色以及部门表。所以当我在 .edmx 上导入这些时,我只得到两个实体。所以我在两个实体中都有导航属性。我有三个用户和两个角色(管理员和只读)。 .下面是我的Sql查询

select U.UserName,r.RoleName,dp.DepName
from Users U
inner join UserRoles UR on U.UseID = UR.UserId
inner join Roles r on UR.RoleId = r.RoleID
inner join dbo.Department Dp on dp.DepId = U.DepId
group by r.RoleName,U.UserName,Dp.DepName 

这是我尝试过的 Linq 查询,我能够获取特定用户的 depName 但不能获取 RoleName。 实际上,用户角色和 UerRoles 之间存在多对多关系。在我的上下文中,我没有 UserRoles 实体。请帮助我。

List<User> user = db.Users.Include("Department,Roles").ToList(); 
foreach (var U in user)
{ 
    Console.WriteLine(U.UseID + " " + U.UserName +" "+ U.Department.DepName+ " "+ U.Roles.);            
}

【问题讨论】:

    标签: c# linq entity-framework entity-framework-4 linq-to-entities


    【解决方案1】:

    就您的多对多关系而言,您需要遍历每个用户的每个角色:

    foreach (var u in users)
    {
        foreach (var r on u.Roles)
        {
            Comsole.WriteLine("User {0} has role {1}, u.UserName, r.RoleName);
        }
    }
    

    【讨论】:

    • 嗨,谢谢,但我仍然无法从角色集合中获取角色名称。
    • 没有错误,但我无法访问 RoleName。我要在哪里为每个用户打印 DepName...AutoGenerated User Entity with Roles Roles Property public TrackableCollection Roles 我需要将属性设为虚拟
    • 是的,非常感谢它的工作..顺便说一下,我是 Entity 框架的新手,一个 linq 查询,所以我正在做一些研发....你在 EF 上工作
    • 好吧,在这种情况下,最好保留多对多关系..或者我们可以将角色 ID 存储在用户表中。哪个更好。
    • @MutturajBali:您有计划将用户添加到多个角色吗?如果设计禁止这样做,您可能希望切换到一对一关系,因此您将只有user.Role.RoleName
    【解决方案2】:

    您必须为每个表执行 1 次包含。您的查询应如下所示

    List<User> users = db.Users.Include("Department").Include("Roles").ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多