如何使用Linq和EF6查询我的连接表(多对多)(获取用户角色)

时间:2014-09-16 22:58:15

标签: linq entity-framework

我有3个表:UsersUserRolesUserRoleAssoc(联接表仅包含UserIDUserRoleID)。实体框架在我的模型中没有显示UserRoleAssociations似乎是正确的。我的目标是返回用户角色列表。如何获取UserRoles = UserID?

的所有UserID

这就是我看到它看起来是正确的还是有更好的方法呢?我想我使用从db?/ / p>更新模型时自动创建的导航属性

public IEnumerable<UserRole> GetUserRoles(int userID)
{
    using (var ctx = new DataEntities())
    {
        var userroles = (from ur in ctx.UserRoles
                         from ura in ur.Users.Where(x => x.UserID == userID)
                              select ur).ToList();
        return userroles;
    }
}

1 个答案:

答案 0 :(得分:1)

您的版本基本上是正确的,但它确实过于复杂。

尝试

    public IEnumerable<UserRole> GetUserRoles(int userID)
    {
        using (var ctx = new DataEntities())
        {
            return ctx.Users.Where(x => x.UserID == userID)
                            .Select(x => x.UserRoles.ToList())
                            .FirstOrDefault();
        }
    }

或者

    public IEnumerable<UserRole> GetUserRoles(int userID)
    {
        using (var ctx = new DataEntities())
        {
            return ctx.UserRoles.Where(x => x.Users.Any(y => y.UserID == userID))
                                .ToList();
        }
    }