2011-08-03 79 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