count + group by + where

时间:2010-07-12 08:42:07

标签: entity-framework linq-to-entities

我正在使用Entity Framework 4并且遇到查询问题。

我有两个对象:

指令 成分

在这些对象之间存在多对多关系。指令范围指向一个或多个组件。并且可以通过多个指令引用组件。

我想知道有多少'已完成'(状态= 6)每个组件都有说明。

在SQL中这很容易:

select c.id, COUNT(*)
from Component c
inner join InstructionComponents ic on c.Id = ic.Component_Id
inner join Instructions i on i.Id = ic.Instruction_Id
where i.StatusValue = 6
group by c.id

我在EF中遇到这个问题。这就是我尝试过的:

var result =
   from component in Copmponents
   where component.Instructions.Any(s => s.Status == 6)
   group component by component.Id
   into componentGroup
   select new { compId = onderdeelGroup.Key, count = componentGroup.Count() };

但是他的查询没有返回正确的计数。我不知道如何计算指令的数量。

1 个答案:

答案 0 :(得分:5)

这个怎么样?

var query = Components.Select(c => new 
            { 
                c.Id, 
                Count = c.Instructions.Count(i => i.Status == 6)
            });