2013-09-12 3 views
0

Как написать этот запрос в выражении LINQ lambda или синтаксисе запроса, если это необходимо? Я уже давно пытаюсь. Множественные объединения затрудняют работу. Итоговые записи на объединение в течение 2000 года, и окончательный результат должен быть около 15 записейПреобразование T-SQL в LINQ Lambda

select 
    year([date]), 
    month([date]), 
    sum(ot.rate) 
from s as s 
join cs cs on cs.s_id= s.id 
join ot ot on ot.id = cs.o_id 
group by 
    year([date]), 
    month([date]) 

это ближайший я получил, но не компилируется. Я не могу получить доступ к свойству ot из блока select.

var query = from se in table_se 
     join cs in table_cs on se.Id equals cs.S_Id 
     join ot in table_ot on cs.O_Id equals ot.Id 
     group se by new { se.Date.Year, se.Date.Month } into grp 
     select new 
     { 
      grp.Key.Year, 
      grp.Key.Month, 
      grp.Sum(ot.Rate) 
     }; 
+0

Установите Resharper и он будет делать свою работу :) – wudzik

+3

Если ты «пытается на некоторое время теперь», то, вероятно, вы должны быть способный рассказать нам, что вы пробовали, и что пошло не так. Возможно, что другие люди предложили бы то, что вы уже пробовали ... –

+0

@JonSkeet Я обновил с ближайшим я смог получить. – Grant

ответ

5

Вы были очень близки - Enumerable.Sum принимает предикат

var query = from se in table_se 
     join cs in table_cs on se.Id equals cs.S_Id 
     join ot in table_ot on cs.O_Id equals ot.Id 
     group ot by new { se.Date.Year, se.Date.Month } into grp 
     select new 
     { 
      Year = grp.Key.Year, 
      Month = grp.Key.Month, 
      Sum = grp.Sum(x => x.Rate) 
     }; 
+0

, когда я пытаюсь, чтобы свойство x было «se», а не «ot», где поле Rate равно – Grant

+0

Ok. нужно изменить «group se new» на «group ot by new» – Grant

+0

@Grant - да, я вижу это сейчас. Хорошее обновление. Рад, что у вас есть решение :) – Jamiec

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