2011-08-03 77 views
4

SQL:LINQ - 加入與GROUP BY和得到平均

SELECT DeptId,avg(Marks) FROM StudentTb s 
JOIN StudInDepartment d on s.StudentId = d.StudentId 
GROUP BY DeptId 

轉換成的Linq:

var deptRpts =   from s in this.ObjectContext.StudentTb 
         join d in this.ObjectContext.StudInDepartment on s.StudentId equals d.StudentId 
         group s by d.DeptId into grp 
         select new { 
          DeptId = grp.Key, 
          AverageMarks = grp.Average(ed=>ed.Marks) 
         }; 

有一個空的結果列表。

在擴大的結果集在調試mode.Its顯示錯誤功能評價超時

需要幫助的這一點。

+0

當你忽略組並且只加入時,你會得到一個非空列表嗎? – Jeroen

+0

@Jeroen如果我刪除了連接它的節目結果(非空)。 – Hukam

+0

和加入它沒有?你的2張桌子真的有共同點嗎?否則加入它們總會給出一個空列表,你可能想考慮一個左連接。 – Jeroen

回答

7

查詢工作正常,至少在我的模擬中,我只是扔在一起......它可能與數據庫的結構有關......在我的模擬中,我有studentID作爲外鍵StudInDepartment(哈哈!)表,即使這樣簡單的查詢工作正常

var deptRpt2 = from d in ctx.StudInDepartment 
    group d by d.DeptId into grp 
    select new { 
     Dept = grp.Key, 
     AverageMarks = grp.Average(ed=>ed.StudentTb.Marks) 
    }; 

您收到「功能評價超時」可能是在Visual Studio debugger issue,不能幫你那裏的消息,那裏有其他討論它的stackoverflow線程。

+0

非常感謝你的幫助。 – Hukam

+0

沒問題!這個查詢是否對你更好? – curtisk

+0

其工作就像魅力。:) – Hukam