2012-05-13 38 views
1

我想翻譯這個SQL語句中的LINQ,但我在LINQLINQ用SUM()連接

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 

很新,我不能得到的JOIN工作這LINQ。我在LINQ中最好的解答是:

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

謝謝!

+0

爲什麼在LINQ版本中有'group by f.aprovada'而不是SQL版本? –

+0

你是可靠的,這對我的查詢沒有必要。我很困擾這部分...... –

+0

「我無法工作」 - 你能更具體嗎?你會得到什麼錯誤? –

回答

1

您可以嘗試SQL to LINQ ...,多年來我總是發現Linq Pad是一個非常方便的工具...

+0

謝謝。我已經測試了這些工具,但不能將SQL轉換爲LINQ與Linq Pad和SQL到LINQ不是免費的。我不是親... –

+0

謝謝,最後我可以下載Linqer的試用版! –

0

終於讓我找到符合我的SQL語句的LINQ查詢:

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

感謝您的幫助!希望這可以幫助!