2013-03-11 9 views
17

て秩序私はSQLクエリのLINQとEntity Frameworkの、内部結合、グループ化、

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にそれを "翻訳" したいと思います。ここに私が試したものです:私はGROUPBYを行うすべての時間が、私は他のメンバーにアクセスカントので

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); 

私はこの問題を解決するために誰が知らない参加し、グループによります。

+0

ポスト。 –

+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); –

答えて

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

ありがとうございます –

+2

メソッドの構文(ここでは2番目のコード例)では、セルゲイ氏の言うとおり、「ナビゲーションプロパティ」が使用されています。例えば、z.Zeit(直接プロパティ)z.Taetigkeit.Taetigkeit1(ナビゲーションプロパティ:クエリはJOIN t in db.Taetigkeit'によって実行されたOP)とz.Firma.Name (ナビゲーションプロパティ:OPはクエリ構文でJOIN f in db.Firma'によって達成されました)。私は、外部キーの関係があればナビゲーションプロパティがEFによって自動的に作成されると思います。しかし、もしForeign Key関係がなければどうでしょうか?それでもナビゲーションプロパティを使用できますか?最初に明示的に作成する必要がありますか? –

関連する問題