我將 Entity Framework Core 與 ASP.Net MVC 一起使用。我的業務物件模型部分由 Jobs(主要物體)組成,每個 Jobs 都包含一個或多個 Projects,每個 Project 都有零個或多個 Schedules(鏈接到部門集,但這在這里并不重要)。每個計劃都有一個 StartDate 和 EndDate。
這是一個(簡化的)類圖(它反映了您所期望的資料庫模式):

我想按 Schedule 物體中最早的 StartDateTime 值對 Jobs 串列進行排序。我還沒有想出一個 LINQ 鏈來完成這個。目前,我已經通過在控制器中直接使用 ADO.Net 來實作我想要的功能,以根據以下 SQL 陳述句組裝作業串列:
@"SELECT
Jobs.JobId,
Jobs.JobName,
Jobs.jobNumber,
MIN(ProjectSchedules.StartDateTime) AS StartDateTime
FROM
Jobs INNER JOIN Projects ON Jobs.JobID = Projects.JobID
LEFT JOIN ProjectSchedules ON Projects.ProjectID = ProjectSchedules.ProjectID
GROUP BY Jobs.JobId, Jobs.JobName, Jobs.JobNumber
ORDER BY StartDateTime"
我更愿意正確使用 EF Core,而不是圍繞它進行最終運行。生成此 SQL 陳述句(或等效陳述句)的 LINQ 陳述句是什么?
uj5u.com熱心網友回復:
您需要一個查詢來“收集”StartDateTime每個作業的專案計劃中的所有 s,取它們的最低值,然后按該值排序:
context.Jobs
.OrderBy(j => j.Projects
.SelectMany(p => p.Schedules)
.Select(s => s.StartDate).OrderBy(d => d).First())
.Select(j => new { ... })
如您所見,其中甚至沒有Min函式。可以使用該函式,但它的性能可能更差,因為它必須評估所有StartDate值,而排序可以使用有序索引。
無論哪種方式,為了比較,這是與Min():
context.Jobs
.OrderBy(j => j.Projects
.SelectMany(p => p.Schedules)
.Select(s => s.StartDate).Min())
uj5u.com熱心網友回復:
首先,我們需要檢索我們可以使用 Include 陳述句執行此操作的所有物體,然后使用 theninclude 檢索更下方的物體。
dbcontext.Jobs.Include(j => j.Projects).ThenInclude(p => p.Schedules)
現在我們擁有了所有物體,您可以進行所有排序、分組或任何您想做的事情。
對我來說,這聽起來像是你想要Orderby的schedule.startdatetime。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/431511.html
標籤:C# asp.net-mvc 实体框架核心 链接到实体 ef-core-6.0
上一篇:如何在ASP.NETCore3.1中查詢整數集合中的整數陣列?
下一篇:ASP.NET按鈕單擊事件
