Подтвердить что ты не робот

Работа над LinqToSQls "запросы с локальными коллекциями не поддерживаются" исключение

Итак, я пытаюсь вернуть коллекцию людей, чей идентификатор содержится в локально созданной коллекции идентификаторов (IQueryable)

Когда я указываю "локально созданную коллекцию", я имею в виду, что коллекция идентификаторов не была получена из запроса LinqToSql и была запрограммирована (на основе ввода пользователя). Мой запрос выглядит так:

var qry = from p in DBContext.People
                  where Ids.Contains(p.ID)
                  select p.ID;

Это вызывает следующее исключение...

"запросы с локальными коллекциями не поддерживаются"

Как я могу найти всех людей с идентификатором, который содержится в моей локально созданной коллекции идентификаторов?

Возможно ли использование LinqToSql?

4b9b3361

Ответ 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));
}