2013-03-11 32 views
17

我有一個SQL查詢實體框架使用LINQ,INNER JOIN,GROUP BY,順序按

select Firma.Name as companyName, 
     Taetigkeit.Taetigkeit as skillName, 
     SUM(Zeit) as time 
from Zeiterfassung 
inner join Firma On ZEiterfassung.FirmenID = Firma.ID  
inner join Taetigkeit on Zeiterfassung.TaetigkeitID = Taetigkeit.ID  
group by Taetigkeit, Firma.Name  
order by Firma.Name 

而且要 「翻譯」 它LINQ。這裏是我的嘗試:

var query = db.Zeiterfassung 
       .Where(x => x.Firma.ID == x.FirmenID && x.TaetigkeitID == x.Taetigkeit.ID) 
       .GroupBy(x => x.Taetigkeit.Taetigkeit1) 
       .Select(x => new Evaluation() { skillName = x.Key, time = x.Sum(y => y.Zeit), //skillName = x.Sum(x => x.Zeit), }) 
       .OrderBy(x => x.skillName); 

我不知道誰帶的連接和組通過,因爲一切的時候,我做了GROUPBY,我不能訪問其他成員解決這個問題。

+0

後你有什麼到目前爲止已經試過。 – 2013-03-11 14:05:38

+0

var query = db.Zeiterfassung.Where(x => x.Firma.ID == x.FirmenID && x.TaetigkeitID == x.Taetigkeit.ID).GroupBy(x => x.Taetigkeit.Taetigkeit1).Select( X =>新評價() { skillName = x.Key, 時間= x.Sum(Y => y.Zeit) // skillName = x.Sum(X => x.Zeit), })。OrderBy(x => x.skillName); – 2013-03-11 14:13:32

回答

35

從你提供的數據,我想查詢應該像

from z in db.Zeiterfassung 
join f in db.Firma on z.FirmenID equals f.ID 
join t in db.Taetigkeit on z.TaetigkeitID equals t.ID 
select new { f.Name, t.Taetigkeit, z.Zeit) into x 
group x by new { x.Taetigkeit, f.Name } into g 
select new { 
    CompanyName = g.Key.Name, 
    SkillName = g.Key.Taetigkeit, 
    Time = g.Sum(i => i.Zeit) 
} 

或者與導航性能:

db.Zeiterfassung 
    .Select(z => new { z.Zeit, z.Taetigkeit.Taetigkeit1, z.Firma.Name }) 
    .GroupBy(x => new { x.Taetigkeit1, x.Name }) 
    .Select(g => new Evaluation { 
     companyName = g.Key.Name, 
     skillName = g.Key.Taetigkeit1, 
     time = g.Sum(y => y.Zeit) 
    }); 
+2

謝謝你的工作 – 2013-03-11 14:27:56

+2

Sergey說,方法語法(這裏的第二個代碼示例)使用「導航屬性」。例如,在'Select'中注意他如何使用z.Zeit(直接屬性)z.Taetigkeit.Taetigkeit1(導航屬性; OP通過'db.Taetigkeit'中的JOIN t在查詢語法中實現)和z.Firma.Name (導航屬性; OP通過'db.Firma'中的JOIN f在查詢語法中實現)。如果有外鍵關係,我認爲導航屬性由EF自動創建。但是如果沒有外鍵關係呢?我們還可以使用導航屬性嗎?我們必須首先明確創建它們嗎? – 2015-09-02 15:22:38