【发布时间】:2023-04-05 22:28:02
【问题描述】:
我有桌子
Task
task_id int
name varchar
和桌子
Event
event_id int autoincrement
time timestamp
task_id int
一个任务有很多事件(创建、挂起、执行、完成等)
我想在一个查询中显示两个任务和它的最后一个事件。我想出了以下声明:
var q = context.Event
.Include(x => x.Task)
.Where(e => e.EventId == e.Task.Event.Max(e1 => e1.EventId))
.Select(x => new
{
x.Task.Name
x.EventId,
x.Time,
});
呈现给 SQL:
SELECT t.name, e.event_id, e.time
FROM event AS e
INNER JOIN task AS t ON e.task_id = t.task_id
WHERE e.event_id = (
SELECT MAX(e0.event_id)
FROM task.event AS e0
WHERE t.task_id = e0.task_id)
很好,但现在我想知道是否可以对任务中的 FIRST 事件执行相同的操作。所以我需要两次加入同一张桌子并卡住
我需要 EF C# 子句来执行以下 SQL:
SELECT t.name, e1.event_id, e1.ts, e2.event_id, e2.ts
FROM event e1, event e2, task t
WHERE t.task_id = e1.task_id
AND e1.task_id = e2.task_id
AND e1.event_id = (
SELECT MIN(event_id)
FROM event
WHERE task_id = t.task_id)
AND e2.event_id = (
SELECT MAX(event_id)
FROM event
WHERE task_id = t.task_id)
请帮忙
【问题讨论】:
-
看看'let'关键字,它可能对你有帮助docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
标签: c# sql entity-framework join