1

来自新手的一点 Linq 方法语法,所以我很感激任何人都可以传递的任何见解。我需要的东西看起来很简单,但它让我绕圈子。我有 2 个表和一个关联(基本上是一个只有 2 个字段的联结表)。我已经浏览了很多关于 SO 的帖子,但我就是不明白。令人沮丧。好的,使用 EF4,我在 Reports 上有一个名为 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)));
4

2 回答 2

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; 
于 2013-01-28T05:18:02.057 回答
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;
于 2013-01-28T06:27:39.137 回答