You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 8:如何获取用户可访问的租户列表?

获取指定用户可访问的租户列表(EF Core 8)

你的问题出在嵌套使用Select导致返回的是多层嵌套的集合(IEnumerable<IEnumerable<IEnumerable<Tenant>>>),而非扁平的租户列表。可以通过以下两种方式解决:

方式一:基于已加载的关联数据处理(内存中扁平化)

如果你已经通过Include加载了所有关联实体,可以用SelectMany逐层展开嵌套集合,再去重得到租户列表:

var tenants = x.SelectMany(u => u.Users2Groups)
               .SelectMany(u2G => u2G.Group.Tenants2Groups)
               .Select(t2G => t2G.Tenant)
               .Distinct()
               .ToList();

方式二:直接构建高效查询(推荐)

不需要预先加载所有关联实体,直接让EF Core生成目标SQL查询数据库,性能更优:

var tenants = dbContext.Users
    .Where(u => u.IdentityId == "089ebd4e-8fe0-48ce-93cd-c8c9ead5de9f")
    .SelectMany(u => u.Users2Groups)
    .SelectMany(u2G => u2G.Group.Tenants2Groups)
    .Select(t2G => t2G.Tenant)
    .Distinct()
    .ToList();

关键说明

  • SelectMany的作用是将嵌套的集合序列“平铺”为单层序列,解决你原来代码中多层嵌套的问题。
  • Distinct()用于去除重复的租户记录(如果同一个租户被多个组关联)。

内容的提问来源于stack exchange,提问作者anli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:44:57