2012-05-13 8 views
1

Je suis en train de traduire cette phrase SQL LINQ mais je suis très nouveau dans LINQLINQ avec SOMME() REJOIGNEZ

select professor.nom, professor.llinatge, 
SUM(case when falta.aprovada = 1 then 1 else 0 end) as FJ, 
SUM(case when falta.aprovada = 0 then 1 else 0 end) as FNJ 
from falta inner join professor on falta.id_profe = professor.id_profe 
group by professor.llinatge, professor.nom 

Je ne peux pas trouver du travail dans ce LINQ avec JOIN. Mon meilleur approche à ceci dans LINQ était:

var query = from f in db.falta 
join p in db.professor 
on f.id_profe equals p.id_profe 
group f by new {p.nom, p.llinatge, f.aprovada} into g 
select new 
{ 
    nombre = g.Key.nom + " "+ g.Key.llinatge, 
    fj = g.Select(s=> s.aprovada == true).Count(), 
    fnj = g.Select(s=> s.aprovada == false).Count() 
}; 

Merci!

+0

Pourquoi avez-vous 'group by f.aprovada' dans votre version LINQ mais pas dans la version SQL? –

+0

Vous êtes rigth c'est pas nécessaire pour ma requête. Je suis très coincé dans cette partie ... –

+0

"Je ne peux pas travailler" - Pouvez-vous être plus précis? Quelle erreur obtenez-vous? –

Répondre

1

Vous pouvez essayer SQL to LINQ ... et au fil des années, je trouve toujours Linq Pad comme un outil très pratique ...

+0

Merci. J'ai déjà testé ces outils mais je ne peux pas convertir SQL en LINQ avec Linq Pad et SQL en LINQ n'est pas gratuit. Je ne suis pas un pro ... –

+0

Merci, enfin je pourrais télécharger une version d'essai de Linqer! –

0

Enfin, je trouve la requête LINQ qui correspondent à mon instruction SQL:

from falta in db.Falta 
join professor in db.Professor on falta.Id_profe equals professor.Id_profe 
group new {professor, falta} by new { 
    professor.Llinatge, 
    professor.Nom 
} into g 
select new { 
    g.Key.Nom, 
    g.Key.Llinatge, 
    FJ = (System.Int64?)g.Sum(p => (
    p.falta.Aprovada == true ? 1 : 0)), 
    FNJ = (System.Int64?)g.Sum(p => (
    p.falta.Aprovada == false ? 1 : 0)) 
}; 

Merci de votre aide! J'espère que cela t'aides!