2016-08-13 8 views
0

を表示しません:グループは、私はこれらのテーブルを持っている期待される結果

TestPackagejoint(id,testpackageid,jointid) 
Joint(id,endid) 

私はjointid,idに基づいtestpackagejointと共同のジョイントを作成します。

私はグループにendidtestpackageidに基づく値、およびendidまたは例のカウントたい:

testpackageid  endid  count 
1      2   3 
4      2   1 
1      3   2 

だから私は

このクエリを記述
var q = (from i in _ctx.TestPackageJoints 
       where i.TestPackageId == Id 
       join joint1 in _ctx.Joints on i.JointId equals joint1.Id 
       group new {joint1.EndId,i.TestPackageId} by new { i, joint1} 
       into g1 
       select new 
       { 
        testpackid = g1.Key.i.TestPackageId, 
        Count = g1.Count(), 
        endid = g1.Key.joint1.EndId 
       }).ToList(); 

しかし結果:

enter image description here

答えて

2

あなたは何を得たいかを理解しなければなりません。あなたはtestpackidとendidを取得したいので、それらをグループ化するのは正しいです。また、testpackidとendidでグループ化したいのですが、ここでnew {i、...}でグループ化するのはなぜですか?

あなたのクエリがあるべき

group new {joint1.EndId,i.TestPackageId} by new {joint1.EndId,i.TestPackageId} 

それとも

join ... 
let item = new {joint1.EndId,i.TestPackageId} 
group item by item 
2

をお試しください:

var query = 
    from tpj in _ctx.TestPackageJoints 
    join j in _ctx.Joints on tpj.JointId equals j.Id 
    where tpj.TestPackageId == id 
    group 1 by new { tpj.TestPackageId, j.EndId } into g 
    select new 
    { 
     g.Key.TestPackageId, 
     g.Key.EndId, 
     Count = g.Count(), 
    }; 

group by句は、フォームgroup [object] by [key]です。鍵の一部としてTestPackageJointオブジェクトを組み込んで、等価性を定義していない可能性があります。そのため、すべてのペアリングに対してグループが生成されました。

関連する問題