【问题标题】:MVC4 lambda expression for SimpleMembershipSimpleMembership 的 MVC4 lambda 表达式
【发布时间】:2013-06-17 14:22:25
【问题描述】:

在 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; }
}

【问题讨论】:

  • 还有,你试过什么?

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


【解决方案1】:

如果你所说的 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
                });

【讨论】:

  • 是的,这就是我所追求的——相当复杂,我会试着理解它——但它确实有效!
【解决方案2】:

你可以使用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();

【讨论】:

    【解决方案3】:

    如果您使用的是实体框架,以下代码将返回您想要的内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多