2013-04-19 8 views
0

Я действительно новичок в этой истории Linq, но у меня хорошее понимание в SQL.Перевести с SQL на Linq

Мне нужно перестроить запрос из SQL в Linq. Мой SQL-запрос работает отлично, и до сих пор я пытался что-то сделать самостоятельно с Linq, но без хорошего результата ...

Возможно ли, что кто-то может помочь мне перевести этот запрос с SQL на Linq?
Я действительно готов узнать что-то новое во всей этой истории. Было бы неплохо, если бы вы могли понять, почему это работает в linq.

SQL Заявление

SELECT TimeReport.EntryDate 
    , SUM(TimeReport.Hours) AS Hours 
    , SUM(BillingRate.HourlyRate * TimeReport.Hours) AS Amount 
FROM BillingRate 
    INNER JOIN Activity 
     ON BillingRate.BillingRateId = Activity.BillingRateIt 
     INNER JOIN TimeReport 
      ON Activity.ActivityId = TimeReport.ActivityId 
       RIGHT OUTER JOIN Dossier 
        ON TimeReport.DossierId = Dossier.DossierId 
        INNER JOIN LBU 
         ON Dossier.LBUId = LBU.LBUId 
        INNER JOIN BU 
         ON Dossier.BUId = BU.BUId 

GROUP BY TimeReport.EntryDate 
HAVING SUM(TimeReport.Hours) > 0 
ORDER BY TimeReport.EntryDate desc 

Что я устал с Linq

var x = (from br in ctx.BillingRate 
        join a in ctx.Activity on br.BillingRateId equals a.BillingRateIt 
        join tr in ctx.TimeReport on a.ActivityId equals tr.ActivityId 

        select br) 
        .GroupJoin(
        (from d in ctx.Dossier 
         join l in ctx.LBU on d.LBUId equals l.LBUId 
         join b in ctx.BU on d.DossierId equals 

Спасибо за помощь и быстрый ответ.

Я оценил каждое усилие !!

+0

Так что же вопрос с вашим запросом linq? – DevelopmentIsMyPassion

+0

@AshReva Я не знаю, как продолжить – Mingebag

+0

Пожалуйста, прочтите это http://stackoverflow.com/questions/2240840/linq-to-sql-equivalent-of-sum-group-by-sql-statement – DevelopmentIsMyPassion

ответ

2

Соединения не нужны, если у вас есть свойства навигации. Так как я точно не знаю, как выглядит ваша модель, используйте в качестве отправной точки следующее:

// starting with Dossier handles the right outer join condition 
var timeRecordQuery = 
     from d in ctx.Dossier 
     from tr in d.TimeReports 
     // this handles the inner join conditions after the right outer join 
     where d.LBUId.HasValue && d.BUId.HasValue 
     // project what you want to use 
     select new 
     { 
      EntryDate = tr.EntryDate, 
      Hours = tr.Hours, 
      // simply use navigation properties, no need to join 
      Amount = tr.Activity.BillingRate.HourlyRate * tr.Hours 
     }; 

var resultsQuery = from e in timeRecordQuery 
        // group by EntryDate 
        group e by e.EntryDate into g 
        // get sum of hours for each EntryDate value 
        let hours = g.Sum(x => x.Hours) 
        // having clause 
        where hours > 0 
        // project results 
        select new 
        { 
         EntryDate = g.Key, 
         Hours = hours, 
         Amount = g.Sum(x => x.Amount) 
        }; 
+0

Спасибо за ваши усилия! awesome – Mingebag

+0

, но что происходит с Inner Joins (Activity) $? – Mingebag

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