2012-05-13 2 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 

Я не могу получить работу это в 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

Почему у вас есть 'group by f.aprovada' в вашей версии LINQ, но не в SQL-версии? –

+0

Вы не нуждаетесь в моем запросе. Я очень застрял в этой части ... –

+0

«Я не могу получить работу» - Можете ли вы быть более конкретным? Какая у вас ошибка? –

ответ

1

Вы можете попробовать SQL to LINQ ... и за эти годы я всегда находил Linq Pad как очень удобный инструмент ...

+0

Спасибо. Я уже тестировал эти инструменты, но не могу преобразовать SQL в LINQ с Linq Pad и SQL, чтобы LINQ не был бесплатным. Я не про ... –

+0

Спасибо, наконец, я смог скачать пробную версию Linqer! –

0

Наконец я нашел запрос LINQ, которые соответствуют моей 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)) 
}; 

Спасибо за помощь! Надеюсь это поможет!

Смежные вопросы