繁体   English   中英

复杂的EF图linq连接

[英]complex EF graph linq join

实体模型

所以,那就是我的模型..漂亮而复杂。

我想通过UserID获取区域。 如果我在SQL中执行此操作,我会在Users表中一直进行一些连接。 您将如何在LINQ查询语法或方法链中执行此操作?

从其他方面来说,我可以非常简单地做到这一点,但是我必须做很多额外的工作来平整生成的图形,并且还需要拉回其间的所有实体。

如果我可以选择包括AreasPermissions和Permissions,那将是很好的..但是在这一点上我不介意另外一个查询来获取它们。

我浮动的另一个选项是使用函数导入到sproc并将其映射到Area ..但是当我开始需要包含其他实体时,它使该选项不那么优雅。 我也试图避免使用sprocs 只是为了使用sprocs,因为它总是与人们一起滑坡......“使用sproc一件事”往往会形成'不要使用EF(表访问)的任何东西'。

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 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM