我是否可以将以下内容转换为LINQ语句.
SELECT reports.* FROM [dbo].[ReportLists] rl
INNER JOIN [dbo].[ReportItems] ri ON rl.Id = ri.ReportListId
INNER JOIN [dbo].[Reports] reports ON ri.Id = reports.ReportItemId
WHERE
reports.createdDate
IN (
SELECT
MAX(report_max_dates.createdDate)
FROM
[dbo].[Reports] report_max_dates
GROUP BY
report_max_dates.seedLot
)
Run Code Online (Sandbox Code Playgroud)
目前我有这个:
db.ReportLists.Select(rl => db.ReportItems
.Where(ri => ri.ReportListId == rl.Id)
.Select(ri => db.Reports
.Where(r => r.ReportItemId == ri.Id)
.GroupBy(r => new { r.seedLot })
.Select(g => g.OrderByDescending(x => x.createdDate).FirstOrDefault())));
Run Code Online (Sandbox Code Playgroud)
上面的LINQ的问题是它返回标题已更改的条目.在数据库中,我保留了所有记录的历史记录(因此需要第一个创建日期顺序下降.当我将标题从标题x更改为标题y时,当我只想要最新记录时,它会出现在两个标题下因此是标题y下的那个.
编辑 很抱歉缺乏细节.我有一个报告表,其中包含有关报告的信息(种子图是标识符).每当编辑报告时,都会插入新记录(与更新旧记录),以便保留历史记录.在这种情况下,createdDate的max条目表示报告是要显示的最新记录.然后将报告分组为标题或ReportItems.这些报告项目包含标题和相关报告.这些reportItem保存在ReportList中,这样我就可以以所需的格式打印出JSON,并且只包含一个由ReportItems链接的状态列和id.
如果报告从标题a移动到标题b,则输入新记录,标题外键链接到更改为的标题.当发生这种情况时,上面给出的LINQ返回每个ReportItem下的记录,它只返回标题b的最新条目(来自上面的例子).除此之外,LINQ语句仅返回createdDate的最新记录.
这是我的类结构(也模仿数据库结构)
public class ReportList {
public int Id {get;set;}
public string status {get;set;}
public List<ReportItem> {get;set;}
}
public class ReportItem {
public int Id {get;set}
public string title {get;set;}
public List<Report> {get;set;}
}
public class Report {
public int Id {get;set;}
public string Lot {get;set;}
... Other data ...
public DateTime createdDate {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,德曼
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |