SimpleMembership的MVC4 lambda表达式

时间:2013-06-17 14:22:25

标签: c# asp.net-mvc linq entity-framework lambda

在LAMBDA-Expressions中,我如何获得所有用户(姓名和ID)及其分配的角色(姓名,ID)

我很难搞清楚这个连接的Lambda语法!

例如:

UserProfile:
Username, UserId
Ken,      1
Barbie,   2
Alice,    3

webpages_Roles:
RoleName, RoleId
Admin,    1
Editor,   2
Guest,    3

webpages_UsersInRoles
UserId, RoleId
1,      1
1,      2
2,      1

Result should be:
UserName, RoleName, UserId, RoleId
Ken,      Admin,     1,      1
Ken,      Editor,    1,      2
Barbie,   Admin,     2,      1

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public virtual ICollection<UsersInRole> UsersInRole { get; set; }
}

[Table("webpages_Roles")]
public class Role
{
    public Role()
    {
        Members = new List<Membership>();
    }

    [Key]
    public int RoleId { get; set; }
    [StringLength(256)]
    public string RoleName { get; set; }

    public ICollection<Membership> Members { get; set; }
    public virtual ICollection<UsersInRole> UsersInRole { get; set; }
}


[Table("webpages_UsersInRoles")]
public class UsersInRole
{
    [Key, Column(Order = 0)]
    public int UserId { get; set; }
    public virtual UserProfile User { get; set; }

    [Key, Column(Order = 1)]
    public int RoleId { get; set; }
    public virtual Role Role { get; set; }
}

3 个答案:

答案 0 :(得分:2)

如果使用lambda语法,则表示方法链语法,这里是:

var result = db.UserProfiles.Join(db.webpages_UsersInRoles, u => u.UserId, ur => ur.UserId, (u, ur) => new {u, ur})
            .Join(db.webpages_Roles, t => t.ur.RoleId, r => r.RoleId, (t, r) => new
                {
                    t.u.UserName,
                    r.RoleName,
                    t.u.UserId,
                    r.RoleId
                });

答案 1 :(得分:1)

您可以使用LINQ

var users = (from users in UserProfile
             from userRoles in users.UsersInRole
             from roles in userRoles.Role
             select new 
             {
               UserName = users.UserName
               , UserId = users.UserId
               , RoleName = roles.RoleName
               , RoleId = roles.RoleId
             }).ToList();

答案 2 :(得分:1)

如果您使用的是Entity Framework,则以下代码将返回您想要的内容。

using(var context = new DBContext()){ 
        return context.UserProfiles;
}