来自新手的Linq方法语法,所以我很欣赏任何人都可以传递的见解。我需要的东西看起来很简单,但它让我围成一圈。我有2个表和一个关联(基本上只有2个字段的联结表)。我在SO上经历了很多帖子,但我只是没有得到它。令人沮丧。好的,使用EF4,我在Reports上有Reports和Roles以及一个名为Roles的导航属性,它是联结表(带有ReportId和RoleId字段,都是整数字段)。我使用UserId从Roles表中获取所有相关角色,使用这些角色从联结表中获取相关报告,然后从Reports中获取报告的名称。
我已经尝试过LinqPad,但是当我将它粘贴回LinqPad时,它在lambda方法语法中生成的内容甚至不起作用。
SQL查询:
select Reports.ReportName
from Reports
inner join UserRoles on Reports.ReportId = UserRoles.ReportId
inner join Roles on Roles.RoleId = UserRoles.RoleId
where UserRoles.UserId == userId
到目前为止代码:
Reports.Select(a => a.Roles.Where(t => t.UserRoles.Select(u => u.UserId == userId)));
答案 0 :(得分:0)
您可以尝试一下,您可能还想根据您的需要过滤您的选择:
var result = from allReports in Reports
join userRoles in userRoles on allReports.ReportId equals userRoles.ReportId
join roles in Roles on userRoles.RoleId equals roles.RoleId
where userRoles.UserId == userid
select allReports;
答案 1 :(得分:0)
在这种情况下,我认为这种查询语法要好得多:
var query = from report in db.Reports
join ur in db.UserRoles on report.ReportId equals ur.ReportId
join role in db.Roles on ur.RoleId equals role.RoleId
where ur.UserId == userId
select report.ReportName;