gpt4 book ai didi

c# - LinQ 到实体 : Query with five tables JOIN

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:40 26 4
gpt4 key购买 nike

我有五个表,主键都是ID

  • 用户
  • User_Role_Relation 与外键 User_ID 和 Role_ID
  • 角色
  • Role_Right_Relation 与外键 Role_ID 和 Right_ID

我目前正在通过存储过程中的以下查询获取所选用户的权限

  SELECT DISTINCT 
tbl_Right.ID, tbl_Right.Name
FROM
tbl_User_Role_Relation
INNER JOIN
tbl_Role_Right_Relation ON tbl_User_Role_Relation.Role_ID = tbl_Role_Right_Relation.Role_ID
INNER JOIN
tbl_Right ON tbl_Role_Right_Relation.Right_ID = tbl_Right.ID
WHERE
tbl_User_Role_Relation.User_ID = @User_ID

我正在尝试使用此代码将其转换为 LINQ to Entity

var query = from r in context.Rights
from rrr in r.Role_Right_Relation
from rl in rrr.Role
from urr in rl.User_Role_Relation
where urr.User_ID == userid
select r;

但我得到以下错误

An expression of type 'Models.Role' is not allowed in a subsequent from clause in a query expression with source type 'System.Linq.IQueryable' Type inference failed in the call to 'SelectMany'

任何建议都会有所帮助。

谢谢。

最佳答案

首先,linq 查询正在执行交叉连接,而不是像您的 sql 那样的内部连接。你应该看看 this

其次,您可能最好在 edmx 中正确定义实体之间的关系,并且您可能根本不必加入,而是可以使用 navigation properites访问父/子并直接过滤这些属性

Entity Framework 的想法是你不必扁平化层次结构

关于c# - LinQ 到实体 : Query with five tables JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6367188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com