1

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

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;

这很好还是有更好的方法来做到这一点?

4

2 回答 2

3

好吧,通过查询数据库使用直接方法将起作用。但是,您完全绕过了会员资格及其提供的所有功能。

为什么不只使用会员资格:

var roles = from MembershipUser u in Membership.GetAllUsers()
             select new {user = u,
             roles = Roles.GetRolesForUser(u.UserName)};

这样,如果将来数据库结构发生变化,您的代码仍然可以工作,因为您不需要知道实现。

你怎么看?

ps:我没有检查生成什么样的SQl,所以如果你需要超强的性能,可能还是直接去数据库更好

于 2011-03-13T14:02:47.827 回答
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 。

干杯

于 2011-03-12T12:33:02.943 回答