подсчитать + сгруппировать по + где

Я использую Entity Framework 4 и не могу выполнить запрос.

У меня два объекта:

Компонент инструкции

Между этими объектами существует отношение «многие ко многим». Фургон с инструкциями указывает на один или несколько компонентов. И на компонент можно ссылаться с помощью нескольких инструкций.

Я пытаюсь узнать, сколько инструкций «готово» (status = 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() };

Но его запрос не возвращает правильное количество. Не знаю, как считать количество инструкций.


person Thomas    schedule 12.07.2010    source источник
comment
Возвращает ли он count = 1 для каждой группы?   -  person Yakimych    schedule 12.07.2010


Ответы (1)


Как насчет этого?

var query = Components.Select(c => new 
            { 
                c.Id, 
                Count = c.Instructions.Count(i => i.Status == 6)
            });
person tzaman    schedule 12.07.2010
comment
Хорошо, это решение. Большое тебе спасибо!! Выглядит просто. Это заняло у меня слишком много времени. - person Thomas; 12.07.2010
comment
На самом деле, только что запомненный Count также имеет версию предиката, поэтому вы можете свернуть в него предложение Where - отредактированное, чтобы быть еще более кратким. - person tzaman; 12.07.2010