2010-07-12 6 views
3

Я использую Entity Framework 4 и имею проблемы с запросом.count + group by + where

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

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

Между этими объектами есть многие-ко-многим. Диспетчер команд указывает на один или несколько Компонентов. А на компонент можно ссылаться несколькими инструкциями.

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

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

+0

Он возвращает count = 1 для каждой группы? – Yakimych

ответ

5

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

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

Хорошо, это решение. Большое спасибо!! Выглядит просто. Мне потребовалось слишком много времени. – Thomas

+0

Добро пожаловать! :) – tzaman

+0

На самом деле, только что вспомнил, что у Count есть предикатная версия, поэтому вы можете свернуть предложение Where в нем - отредактировано, чтобы быть еще более кратким. – tzaman