我正在尝试使用LINQ获取所有具有其角色的用户的列表。 该应用程序基于会员资格提供者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()
答案 0 :(得分:2)
之前我已经知道,当您想使用LINQ
来获取数据并使用另一个LINQ
时,它是行不通的。
解决此问题的最佳方法是,必须在Roles
之前获取所有Query
(当数据保存在内存中时,可以轻松获得这些数据)或使该方法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();
当
中建立其他连接GetRolesForUser
是Async
或MultyTask
时,如果您的基础Query
要执行,而您没有使用await
键,则会发生异常,因为EF无法在一个Query