Работа над LinqToSQls "запросы с локальными коллекциями не поддерживаются" исключение
Итак, я пытаюсь вернуть коллекцию людей, чей идентификатор содержится в локально созданной коллекции идентификаторов (IQueryable)
Когда я указываю "локально созданную коллекцию", я имею в виду, что коллекция идентификаторов не была получена из запроса LinqToSql и была запрограммирована (на основе ввода пользователя).
Мой запрос выглядит так:
var qry = from p in DBContext.People
where Ids.Contains(p.ID)
select p.ID;
Это вызывает следующее исключение...
"запросы с локальными коллекциями не поддерживаются"
Как я могу найти всех людей с идентификатором, который содержится в моей локально созданной коллекции идентификаторов?
Возможно ли использование LinqToSql?
Ответы
Ответ 1
Если идентификаторы являются списком, массивом или аналогичным, L2S будет переводить в содержащийся.
Если Ids является IQueryable, просто включите его в список перед его использованием в запросе. Например:
List<int> listOfIDs = IDs.ToList();
var query =
from st in dc.SomeTable
where listOfIDs.Contains(st.ID)
select .....
Ответ 2
Я тоже боролся с этой проблемой. Решила мою проблему с использованием Any() вместо
people.Where(x => ids.Any(id => id == x.ID))
Ответ 3
Извините, но ответы здесь не сработали для меня, поскольку я делаю динамические типы далее.
То, что я сделал, это использовать "СОЮЗ" в цикле, который отлично работает. Вот как:
var firstID = cityList.First().id;
var cities = dc.zs_Cities.Where(c => c.id == firstID);
foreach(var c in cityList)
{
var tempCity = c;
cities = cities.Union(dc.zs_Cities.Where(cty => cty.id == tempCity.id));
}