使用Linq2Sql获取所有用户及其角色(成员资格和角色),正确的查询?

时间:2011-03-12 10:32:54

标签: linq-to-sql c#-4.0 membership-provider roleprovider

我试图从生成的成员资格和角色表中获取所有用户及其角色,我想出了这个:

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;

这样做还是有更好的方法吗?

2 个答案:

答案 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

干杯