2013-03-11 105 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