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
相关产品推荐
相关产品推荐

