Руководство по проектированию Алгоритма содержит некоторые интересные тематические исследования с творческим использованием графиков. Несмотря на ее имя, книга очень читаема и время от времени даже интересна.
Фильтрация TableA
перед объединением, вероятно, более эффективна:
var clubs = from a in Entity.TableA
where a.userName == "bob"
from b in a.TableB
where b.clubId == "Car"
select b;
var count = clubs.Count();
Вам не нужно использовать две переменные, это просто мое предпочтение здесь для ясности.
Или можно немного упростить синтаксис метода:
var count = Entity.TableA.Where(a => a.userName == "bob")
.SelectMany(a => a.TableB)
.Count(b => b.clubId == "Car");
Однако я не уверен, что EF понимает эти конкретные выражения. В противном случае компилятор переведет приведенный выше запрос следующим образом:
var count = Entity.TableA.Where(a => a.userName == "bob")
.SelectMany(a => a.TableB, (a,b) => new { a, b })
.Where(x => x.b.clubId == "Car")
.Count();
Предполагая, что ваша модель EF имеет отношения между пользователями и клубами, можно сделать что-то вроде этого:
var usersNamedBobInCarClub =
from A in User
from B in A.Clubs
where A.userName == "bob" &&
B.clubId == "Car"
select A;
Если вы хотите, чтобы возвращаемые элементы как пользователей, так и клубов, взглянули на объединения в запросе.