Мне кажется, что важно, используете ли вы переменную для временного хранения IQueryable или нет. Смотрите упрощенный пример ниже:Linq to SQL дает NotSupportedException при использовании локальных переменных
Это работает:
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;
Но все-таки я запутался. Может ли кто-нибудь пролить свет на то, почему первый запрос не работал при использовании переменной?
Я не смог воспроизвести это. пожалуйста, загрузите yout Linq в схему SQL и отправьте нам ссылку – Andrey