我试图从生成的成员资格和角色表中获取所有用户及其角色,我想出了这个:
var query = from a in aspnet_Users
select new { a.UserName, a.UserId } into b
join c in aspnet_UsersInRoles on b.UserId equals c.UserId
join d in aspnet_Roles on c.RoleId equals d.RoleId
group d.RoleName by b;
这样做还是有更好的方法吗?
答案 0 :(得分:3)
好吧,通过查询数据库使用直接方法将起作用。 但是,您完全绕过了会员资格及其提供的所有功能。
为什么不使用会员资格:
var roles = from MembershipUser u in Membership.GetAllUsers()
select new {user = u,
roles = Roles.GetRolesForUser(u.UserName)};
这样,如果以后数据库结构发生变化,您的代码仍然有效,因为您不需要了解实现。
您怎么看?
ps:我还没有检查生成什么样的SQl,所以如果你需要超级性能,那么直接进入数据库可能更好
答案 1 :(得分:0)
是的。您基本上已将SQL查询转换为LINQ,并忘记在LINQ中您可以导航属性(即user.Role),从而导致自动连接。
只需获取用户,同时告诉Linq to SQL以带来用户的角色(或者另一种方式:带来角色并包含相关用户)会更简单。这是一个链接,可以看到如何在不延迟加载的情况下执行此操作:http://www.singingeels.com/Blogs/Nullable/2008/10/27/EntityFramework_Include_Equivalent_in_LINQ_to_SQL.aspx。
干杯