2009-06-18 2 views
1

У меня есть три стола, профессора, профессор Студент, студент.Entity Framework Many-to-Many + Count

Я хочу всех профессоров + Сколько учеников у каждого профессора.

Я могу это сделать:.

context.ProfessorSet.Include("Student") 

context.ProfessorSet.Include ("Студент") ToList() прочитает все три таблицы.

Но я не хочу получать Студенческий стол, я хочу, чтобы Линк просто получил «Профессор Стол» + «Граф (*) Профессор Студент группы по студентам».

Возможно ли это?

ответ

2

Я использую это:

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

Но генерировать этот SQL:

ЗЕЬЕСТ c.id, C.Nome, C.C1 ОТ (SELECT A .Id, A.Nome, (SELECT COUNT (0) Профессор Студент A С. Б. ГДЕ A.Id = B.ProfessorId ) КАК [С1] от профессора в качестве)

Хочу такое:

Выберите A.Id, Count (0) от профессора А внутреннее соединение ProfessorStudent B на a.Id = B.ProfessorId Group By a.id

+0

Спасибо @Fujiy, он отлично работает для меня! –

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

Ошибка на линии Professor = р, не удается разрешить символ р И Count = sc.Count() Count() не существует –

+0

Исправлена ​​ошибка. p верно. –

Смежные вопросы