Существует два способа написания LINQ-запросов, и хотя это не имеет большого значения, когда вы используете один, полезно знать оба из них, потому что они могут кое-что узнать о том, как работает LINQ.
Например, у вас есть набор заданий. Если бы вы выбрали все задания с идентификатором IndustryId, равным 5 (дикое предположение о типах данных), вы, вероятно, написали бы что-то вроде этого:
from j in dbConnection.jobs
where j.inustryId == 5
select j;
Тот же самый запрос также может быть написан так
dbConnections.jobs.Where(j => j.industryId == 5);
Теперь я здесь не для того, чтобы проповедовать, говоря, что один путь лучше другого, но здесь вы можете ясно увидеть, как LINQ, используя синтаксис методов расширения, автоматически выбирает повторяющийся объект (если вы не делаете выбор), тогда как в синтаксисе запроса вы должны сделать это явно. Кроме того, если бы вы добавили сюда другое предложение where, это выглядело бы примерно так:
from j in dbConnection.jobs
where j.inustryId == 5 // not using && here just to prove a point
where j.cityId == 3 // I THINK this is valid syntax, I don't really use the query-syntax in linq
select j;
Находясь в методах расширения, вы можете просто добавить больше вызовов методов, например так:
dbConnections.jobs.Where(j => j.industryId == 5)
.Where(j => j.cityId == 3);
Теперь это полезно знать, потому что это означает, что вы можете просто поместить свой linq-запрос в функцию и продолжить ее запрашивать. И все, что вам нужно сделать, чтобы это работало в вашем случае, это просто явно выбрать начальную переменную j или все переменные, которые вам нужны, например:
var q =
from j in dbConnection.jobs
join i in dbConnection.industries on j.industryId equals i.id
join c in dbConnection.cities on j.cityId equals c.id
join s in dbConnection.states on j.stateId equals s.id
join pt in dbConnection.positionTypes on j.positionTypeId equals pt.id;
select new {j = j, i = i, c = c, s = s, pt = pt };
return q;
Тогда вы должны быть в состоянии сделать, например, это:
getJobsQuery().Where(a => a.i.id == 5); // I used a as a name for "all", like the collection of variables
или с использованием синтаксиса запроса
from a in getJobsQuery()
where a.i.id == 5
select a;