我正在尝试使用 LINQ 获取所有用户及其角色的列表。 该应用程序基于 Membership Provider ver.1,我想从下面的配置行可以看到:
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="2" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</providers>
</roleManager>
我的 LINQ 查询如下:
var users = (from u in db.Users
join m in db.Memberships on u.UserId equals m.UserId
select new
{
m.Email,
u.UserName,
u.UserId,
m.IsLockedOut,
Roles = Roles.GetRolesForUser(u.UserName) //doesn't work
}).ToList();
问题是 Roles = Roles.GetRolesForUser(u.UserName) 不能作为类 Roles 没有任何方法 GetRolesForUser()
最佳答案
我以前就见过这种情况,我知道当您想使用 LINQ
获取数据并使用另一个 LINQ
时,它不起作用。
解决这个问题的最好方法是,您必须在查询
之前获取所有Roles
(当您的数据保存在内存中时,您可以轻松获取这些数据) 或将该方法设置为 Awaitable
,如下所示:
有内存:
var allRoles = _roleMaganer.GetAllRoles();
var users = (from u in db.Users
join m in db.Memberships on u.UserId equals m.UserId
select new
{
m.Email,
u.UserName,
u.UserId,
m.IsLockedOut,
Roles = allRoles.FirstOrDefault(x=>x.UserName == u.UserName)
}).ToList();
可等待:
var users = (from u in db.Users
join m in db.Memberships on u.UserId equals m.UserId
select new
{
m.Email,
u.UserName,
u.UserId,
m.IsLockedOut,
Roles = await Roles.GetRolesForUser(u.UserName)
}).ToList();
When the
GetRolesForUser
wasAsync
orMultyTask
when your baseQuery
want to execute, and you don't used ofawait
key, exception occured, because the EF can't make other a connection in oneQuery
关于c# - ASP.NET 成员(member)资格提供程序无法在 LINQ 查询中返回用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464117/