0

我有这 3 张桌子:

Process、Action 和 Process_Actions(多对多,它注册了一个Process可以执行的所有Action。基本上,这个表有 Process_Id、Action_Id 和一个唯一的 ID(用于排序)。

我想要的是一个 LINQ 查询来获取所有进程的列表并只获取最后一个操作(按日期排序)

这是我的工作 SQL 查询:

SELECT P.Id, P.Name, PA.Action_Id FROM Process P
    JOIN Process_Actions PA ON P.Id = PA.Process_Id 
    WHERE PA.Id IN (SELECT MAX (PA.Id) FROM Process_Actions INNER JOIN Process_Actions PA ON P.Id = PA.Process_Id)
4

2 回答 2

1

试试这个:

context.Processes.Select(p => new { Process = p,
    LastAction = p.Actions.OrderbyDescending(a => a.Date).FirstOrDefault() } )

假设Action有一个属性Date(正如你所说的按 date 排序)。

于 2012-04-10T17:25:12.337 回答
0

我会尝试这样的事情

var maxId = (from pa in context.Process_Actions 
join pa on pa.Id = pa.Process_Id)
select (int?)pa.Id).Max();

var query = from p in context.Process
join pa in context.Process_Actions on p.Id equals pa.Process_Id
where maxId.Contains(pa.Id)
select new
{
    p.Id, 
    p.Name, 
    pa.Action_Id
}
于 2012-04-10T16:19:28.630 回答