Мне кажется, что имеет значение, используете ли вы переменную для временного хранения IQueryable или нет. См. Упрощенный пример ниже:
Это работает:
List<string> jobNames = new List<string> { "ICT" };
var ictPeops = from p in dataContext.Persons
where ( from j in dataContext.Jobs
where jobNames.Contains(j.Name)
select j.ID).Contains(p.JobID)
select p;
Но когда я использую переменную для временного хранения подзапроса, я получаю исключение:
List<string> jobNames = new List<string> { "ICT" };
var jobs = from j in dataContext.Jobs
where jobNames.Contains(j.Name)
select j.ID;
var ictPeops = from p in dataContext.Persons
where jobs.Contains(p.JobID)
select p;
"System.NotSupportedException: запросы
с местными коллекциями не
поддерживается "
Я не понимаю, в чем проблема. Разве эта логика не должна работать в LINQ?
UPDATE:
Вчера я нашел обходной путь для получения 1 запроса при использовании нескольких переменных:
var jobs = from j in dataContext.Jobs
where jobNames.Contains(j.Name)
select j.ID;
var ictPeops = from p in dataContext.Persons
join j in jobs on p.JobID equals j
select p;
Но я все еще в замешательстве. Может кто-нибудь пролить свет на то, почему первый запрос не работает при использовании переменной?