我有一張如下表:
作業安排:
JobId ProcessId DepartmentId Status ProcessedTime
1 100 10 Done 2022-11-08 19:41
2 101 10 Done 2022-11-09 19:41
3 100 10 Failed 2022-11-09 19:41
我想group by ProcessId and select top 1 Status by latest ProcessedTime( order by ProcessedTime desc) 然后再次按 " Status" 分組以計算 " Done" 和 " Failed" 統計資料。
最終輸出:
Done = 1
Failed = 1
將根據最新情況考慮“ Fail”狀態ProcessId = 1002022-11-09 19:41
代碼:
var statistics = (from js in context.JobSchedular
where js.DepartmentId == 10
group by ProcessId //
select new StatisticsModel
{
Done = 1,
Failed = 1
}
).FirstOrDefault();
我對按 ProcessId 分組并按最新的 ProcessedTime 選擇前 1 個狀態,然后按“狀態”進一步分組以計算統計資料有點困惑。
有人可以幫忙嗎?
uj5u.com熱心網友回復:
如果我正確理解預期結果,它應該是以下查詢:
var jobs =
from js in context.JobSchedular
where js.DepartmentId == 10
select js;
var staitsticQuery =
from js in jobs
group js by js.ProcessId into g
select new
{
ProcessId = g.Key,
Done = g.Sum(x => x.Status == "Done" ? 1 : 0),
Failed = g.Sum(x => x.Status == "Failed" ? 1 : 0)
};
var finalQuery =
from s in staitsticQuery
from js in jobs
.Where(js => js.ProcessId == s.ProcessId)
.OrderByDescending(js => js.ProcessedTime)
.Take(1)
select new
{
ProcessId = s.ProcessId,
Done = s.Done,
Failed = s.Failed,
LastStatus = js.Status
};
var statistics = finalQuery.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/532864.html
標籤:C#林克实体框架核心
