2011-08-03 3 views
4

SQL 얻을 : 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) 
         }; 

가 빈 결과 목록을 얻었다 :

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

이 Linq에로 변환합니다.

결과 설정된 디버그 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) 
    }; 

당신이 거기 당신을 도울 수, 비주얼 스튜디오 debugger issue 될 수있다 "기능 평가 시간이 초과되었습니다"받은 메시지 확인, 다른 프로그래머 작동 그것뿐만 아니라 논의 stackoverflow 스레드.

+0

감사합니다. – Hukam

+0

문제 없음! 이 쿼리가 더 잘 작동 했습니까? – curtisk

+0

그 매력처럼 일했다. :) – Hukam