Linq to sql 使用Linq2Sql获取所有用户及其角色(成员资格和角色),对吗?

Linq to sql 使用Linq2Sql获取所有用户及其角色(成员资格和角色),对吗?,linq-to-sql,c#-4.0,membership-provider,roleprovider,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

我试图从生成的成员资格表和角色表中获取所有用户及其角色,我得出以下结论:

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;

这是好的还是有更好的方法呢?

是的。您基本上已经将SQL查询转换为LINQ,并且忘记了在LINQ中您可以导航属性(即user.Role),这会导致自动联接

如果只获取用户,同时告诉Linq to SQL携带用户的角色(或者另一种方式:携带角色并包含相关用户),则会更简单。这里有一个链接,可以查看如何在不延迟加载的情况下执行此操作:


干杯

好吧,使用查询数据库的直接方法将有效。 但是,您完全忽略了成员资格及其提供的所有功能

为什么不直接使用会员资格:

var roles = from MembershipUser u in Membership.GetAllUsers()
             select new {user = u,
             roles = Roles.GetRolesForUser(u.UserName)};
这样,如果将来数据库结构发生更改,您的代码仍然可以工作,因为您不需要知道实现

你觉得怎么样


ps:我还没有检查生成了什么样的SQl,所以如果您需要高性能,最好直接转到DB

Hi,是的,我忘记了:-)但是我注意到我不能一次从用户到角色-从用户我只能到用户角色。谢谢你的链接。我想我还是想保持懒散的加载。。。