如何获取父级和相关表的第一个子级

时间:2012-04-10 15:57:33

标签: .net sql linq c#-4.0 entity-framework-4

我有这3张桌子:

流程,操作和流程操作(多对多,注册所有操作 进程可以执行。基本上,此表具有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)

2 个答案:

答案 0 :(得分:1)

试试这个:

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

假设Action有一个属性Date(正如您所说按日期排序)。

答案 1 :(得分: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
}