Я не уверен, почему ваши актеры имеют только int для идентификатора фильма, когда у актера обычно есть список фильмов, но я считаю, что вам нужно включить в группу все три типа объектов, а затем выбрать отдельные фильмы и отдельных актеров, чтобыполучить счет.
Пример:
var directors = new[] { new { DirectorName = "Director A", DirectorID = 1 },
new { DirectorName = "Director B", DirectorID = 2 }};
var movies = new[] { new { MovieName = "Movie A", MovieID = 1, DirectorID = 1 },
new { MovieName = "Movie B", MovieID = 2, DirectorID = 2 }};
var actors = new[] { new { ActorName = "Actor A", ActorID = 1, MovieID = 1},
new { ActorName = "Actor B", ActorID = 2, MovieID = 1},
new { ActorName = "Actor C", ActorID = 3, MovieID = 1},
new { ActorName = "Actor D", ActorID = 4, MovieID = 2}};
var results = from d in directors
from m in movies
.Where(m => m.DirectorID == d.DirectorID)
from a in actors
.Where(a => a.MovieID == m.MovieID)
where d.DirectorID == 1
group new { d, m, a } by d.DirectorName into grp
select new
{ DirectorName = grp.Key,
MovieCount = grp.Select(x => x.m).Distinct().Count(),
ActorCount = grp.Select(x => x.a).Distinct().Count()
};
Даст
result = new [] { new { DirectorName = "Director A", MovieCount = 1, ActorCount = 3}};