2009-06-18 101 views
1

我有三张表格,教授,教授,学生,学生。实体框架多对多+数量

我想要所有的教授+每位教授有多少名学生。

我可以做到这一点。

context.ProfessorSet.Include("Student") 

context.ProfessorSet.Include( “学生”)ToList()将读取所有三个表。

但我不想得到学生表,我希望Linq只是得到“教授表”+“计数(*)教授学生组由StudentId”。

它有可能吗?

回答

2

我使用这个:

 var c = from tag in contexto.ProfessorSet 
       select new 
       { 
        Tag = tag, 
        Count = tag.Student.Count 
       }; 

但生成该SQL:

选择 C.Id, C.Nome, C.C1 FROM (SELECT 一.Id, A.Nome, (SELECT COUNT(0) FROM ProfessorStudant A SB WHERE A.Id = B.ProfessorId )AS [C1] FROM的教授)

我想这样的:

选择A.Id,COUNT(0)从A教授 内部联接ProfessorStudent B关于上线 教授= p A.Id = B.ProfessorId 集团通过A.Id

+0

谢谢@Fujiy它对我来说非常完美! – 2016-05-17 14:23:08

0
from p in context.ProfessorSet 
from s in p.Student 
group s by s.StudentId into g 
select new 
{ 
    Professor = p, 
    StudentCounts = from sc in g 
        select new 
        { 
         StudentId = sc.Key, 
         Count = sc.Group.Count() 
        } 
} 
+0

错误, 无法解析符号p 和COUNT = sc.Count() Count()不存在 – 2009-06-19 12:49:05

+0

固定计数。 p是正确的。 – 2009-06-19 13:24:27