ASP.Net Core:使用LinQ Select方法获取用户角色

问题描述 投票:3回答:1

在Asp.Net Core中使用LinQ选择用户角色时,我遇到了问题。这是我的功能:

public async Task<ApiResult<PagedResult<UserViewModel>>> GetUserPaging(PagingRequestBase request)
{
    if(request==null) return new ApiErrorResult<PagedResult<UserViewModel>>("Invalid request");
    var query= await userManager.Users.Skip((request.PageIndex-1)*request.PageSize)
    .Take(request.PageSize)
    .Select(async x => new UserViewModel{
        UserName=x.UserName,
        Dob=x.Dob,
        Email=x.Email,
        FirstName=x.FirstName,
        LastName=x.LastName,
        Roles=await userManager.GetRolesAsync(x)
    }).ToListAsync();
}

我想在Select方法中使用async关键字以使用:await userManager.GetRolesAsync(x)但智能警告我:

异步lambda表达式无法转换为表达式树。

感谢您的帮助^^

c# linq asp.net-core user-roles
1个回答
1
投票

我可以建议您2个解决方案。第一个步骤是将这两个步骤分开。首先,获取用户,然后获取角色。我认为问题可能是EF无法将异步代码转换为表达式树,然后再将其转换为SQL。因此,通过单独进行设置可确保您第二步是对对象请求的linq(而不是对SQL的linq)。该解决方案的问题在于您向数据库提出了很多请求。这是N + 1问题。

© www.soinside.com 2019 - 2024. All rights reserved.