复EF图linq连接
所以,这就是我的模型。。漂亮而复杂 我希望通过用户ID获取区域。如果我在SQL中这样做,我会执行一系列连接,一直到用户表。在LINQ查询语法或方法链接中,您将如何做到这一点 我可以从另一个角度非常简单地完成这项工作,但是我必须做很多额外的工作来展平结果图,而且还需要拉回中间的所有实体 如果我可以选择包括AreaPermissions和Permissions,那将是非常重要的。。但在这一点上,我不介意使用额外的查询来获取这些信息 我浮动的另一个选项是使用函数导入存储过程并将其映射到区域。。但当我开始需要包含其他实体时,它会使该选项变得不那么优雅。我还试图避免仅仅为了使用存储过程而使用存储过程,因为人们总是在走下坡路……”“为一件事使用存储过程”倾向于“不为任何事使用EF(表访问)”复EF图linq连接,linq,entity-framework,Linq,Entity Framework,所以,这就是我的模型。。漂亮而复杂 我希望通过用户ID获取区域。如果我在SQL中这样做,我会执行一系列连接,一直到用户表。在LINQ查询语法或方法链接中,您将如何做到这一点 我可以从另一个角度非常简单地完成这项工作,但是我必须做很多额外的工作来展平结果图,而且还需要拉回中间的所有实体 如果我可以选择包括AreaPermissions和Permissions,那将是非常重要的。。但在这一点上,我不介意使用额外的查询来获取这些信息 我浮动的另一个选项是使用函数导入存储过程并将其映射到区域。。但当我开
var userByID = new Func<User, bool>(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase));
var user = this._context.Users
.Include("TeamsUsers.Team.TeamsRoles.Role.RolesAreasPermissions.AreaPermission.Area")
.Include("TeamsUsers.Team.TeamsRoles.Role.RolesAreasPermissions.AreaPermission.Permission")
.Single(userByID);
var userByID=newfunc(x=>x.UserId.Equals(UserId,StringComparison.InvariantCultureIgnoreCase));
var user=this.\u context.Users
.Include(“团队用户、团队、团队角色、角色、权限、区域”)
.Include(“团队用户、团队、团队角色、角色、区域权限、权限”)
.Single(userByID);
我没有办法测试这一点,但我认为它应该可以工作:
var result =
from user in _context.Users
where user.Id == userId
from teamUser in user.TeamUsers
from teamRole in teamUser.Team.TeamRoles
from roleAreaPermission in teamRole.Role.RoleAreaPermissions
select roleAreaPermission.AreaPermission.Area;
我没有办法测试这一点,但我认为它应该有效:
var result =
from user in _context.Users
where user.Id == userId
from teamUser in user.TeamUsers
from teamRole in teamUser.Team.TeamRoles
from roleAreaPermission in teamRole.Role.RoleAreaPermissions
select roleAreaPermission.AreaPermission.Area;
谢谢David,只做了一点修改,看起来效果不错。我仍然很好奇是否可以避免返回中间实体(包括用户),以及如何使用方法语法。@JoeBrockhaus查询只返回
select
语句中的内容,因此它只返回区域
@JoeBrockhaus您可以使用SelectMany
的方法语法编写此查询,但我认为这看起来很奇怪,可读性更高。这是我最初的想法(re:select),但当我在图形中导航时,所有依赖实体都被水合,我已经关闭了惰性加载。谢谢David,只做了一点修改,似乎效果很好。我仍然很好奇是否可以避免返回中间实体(包括用户),以及如何使用方法语法。@JoeBrockhaus查询只返回select
语句中的内容,因此它只返回区域
@JoeBrockhaus您可以使用SelectMany
的方法语法编写此查询,但我认为这看起来很奇怪,可读性更高。这是我最初的想法(re:select),但当我在图形中导航时,所有依赖实体都被水合,我已经关闭了惰性加载。