我们有一种方法可以加载所有ASP.NET核心身份用户

await _userManager.Users.ToListAsync()

我们还有一个方法来加载特定身份用户的角色:

IList<string> userRoles = await UserManager.GetRolesAsync(userId);

但是,有没有办法在一次呼叫中为所有身份用户加载他们的角色?基本上是一个数据库调用.

因为如果我想要加载所有用户并想要在dto中返回他们的角色,我将不得不循环遍历所有用户,然后必须为所有用户访问数据库来获取他们的角色,这是非常低效的

有没有办法可以在一次呼叫中为所有用户同时加载这两个信息?

推荐答案

为了达到你的要求,你可以试着用英孚来创建羽毛球.下面是示例代码,它将帮助您一次加载所有用户及其角色信息.

using Microsoft.EntityFrameworkCore;

var usersWithRoles = await _context. Users
. Include(u=> u.UserRoles)
. ThenInclude(ur => ur. Role)
. Select(u => new 
{
User = u,
Roles = u.UserRoles.Select(ur => ur.Role.Name). ToList()
})
. ToListAsync();

Csharp相关问答推荐

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

禁用AutoSuggestBox项目更改时的动画?

Entity Framework Core 8 dbcontext—无法以多对多关系添加某些行'

在FilePath中搜索一个词,并根据First Match从左到右提取文件路径

选取器与.NET Maui MVVM的绑定属性

Int和uint相乘得到LONG?

在.NET核心项目中创建Startup.cs比在Program.cs中注册服务好吗?

我的MRG32k3a算法实现返回的数字超出了预期的[0,1]范围

EFR32BG22 BLE在SPP模式下与PC(Windows 10)不连接

自定义列表按字符串的部分排序

是否可以将Collectionview中的数组与ObservableCollection绑定?

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

EF Core 7-忽略模型绑定中的虚拟属性

Visual Studio 17.8.0制表符自动完成问题--三缩进

Xamarin.Forms-如何创建可 Select 的显示alert 或弹出窗口?

将两个for循环更改为一条LINQ语句

仅在Blazor Web App中覆盖生产的基本路径(.NET8中的_Hosts.cshtml文件功能?)

单位中快照的倾斜方向

无法将.Net Framework 4.8.1升级到.Net 7

C#Web服务转换为 node /Express不工作