我正在尝试将以下内容转换为 C# 中的 LINQ to SQL 语句。谁能帮我一把?基本上,我的表记录了所有更改历史记录,以便每个种子区的创建日期最大日期是最新记录并且要显示的正确记录。
SELECT
reports.*
FROM
[dbo].[Reports] reports
WHERE
reports.createdDate
IN (
SELECT
MAX(report_max_dates.createdDate)
FROM
[dbo].[Reports] report_max_dates
GROUP BY
report_max_dates.Lot
)
到目前为止,这就是我所拥有的。
var result = (from report in db.Reports
where report.createdDate == (from report_max in db.Reports
group report_max by report_max.Lot into report_max_grouped
select report_max_grouped).Max()
select report);
我不知道如何获取MAX
所有报告的日期以及如何IN
在 report.createdDate 上做一个声明。
编辑
如果我有一个包含多个报告的单独标题,我现在将如何为语句建模。例如,我有报告 l、m、n、x、y、z。报告 lmn 具有通过外键 reportList_Id 链接到它们的标题“hello”,并且 xyc 具有以相同方式链接的标题“goodbye”。
基本上我现在需要将所有报告放入以下对象
public class ReportRoot : DbContext {
public DbSet<ReportList> reportList {get;set;}
}
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;}
public DateTime createdDate {get;set;}
}
有我的课程的完整列表。我需要做的是取回包含多个reportItems 的reportList(这是带有标题的报告列表)。所以这些 ReportItems 将包含报告本身。所以我需要取回所有带有 max createdDate 的报告,就像我们对查询的第一部分所做的一样,但我需要将它们作为包含 ReportItems 的 ReportList 对象取回,以便多个报告具有它们的标题。
我需要上述格式的对象才能将 JSON 正确序列化和反序列化到我的对象中。
我想出了这个,它将它们分开并返回标题,但是我返回了不需要的记录,例如我更改标题的记录显示在两个标题下。
db.ReportLists.Select(rl => db.ReportItems
.Where(ri => ri.ReportListId == rl.Id)
.Select(ri => db.Reports
.Where(r => r.ReportItemId == ri.Id)
.GroupBy(r => r.seedLot)
.Select(g => g.OrderByDescending(x => x.createdDate).FirstOrDefault())))
谢谢,德曼