以下を 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())))
ありがとう、Dman