2010-07-12 4 views
3

J'utilise Entity Framework 4 et j'ai des problèmes avec une requête.count + group by + où

J'ai deux objets:

Instruction Composant

Entre ces objets, il y a plusieurs à-plusieurs. Une instruction Van pointe vers un ou plusieurs composants. Et un composant peut être référencé par plusieurs instructions.

J'essaie de connaître le nombre d'instructions «terminées» (état = 6) pour chaque composant.

Dans ce SQL est facile:

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 

Je vais avoir du mal à faire cela dans EF. C'est ce que j'ai essayé:

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() }; 

Mais sa requête ne retourne pas le nombre correct. Je ne sais pas comment compter le nombre d'instructions.

+0

Renvoie-t-elle nombre = 1 pour chaque groupe? – Yakimych

Répondre

5

Que pensez-vous de cela?

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

Ok, c'est la solution. Merci beaucoup!! Ça a l'air facile. Ça m'a pris trop de temps. – Thomas

+0

De rien! :) – tzaman

+0

En fait, il suffit de rappeler que Count a aussi une version de prédicat, de sorte que vous pouvez réduire la clause Where à l'intérieur - édité pour être encore plus concis. – tzaman