解决LinqToSQls“不支持使用本地集合的查询”例外

时间:2009-07-05 16:14:50

标签: linq-to-sql collections

所以,我正在尝试返回一个人员集合,其ID包含在本地创建的ID集合中(IQueryable)

当我指定“本地创建的集合”时,我的意思是Ids集合不是来自LinqToSql查询,而是以编程方式创建(基于用户输入)。 我的查询如下:

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

这会导致以下异常......

“不支持使用本地集合的查询”

如何找到我本地创建的Ids集合中包含id的所有人?

是否可以使用LinqToSql?

3 个答案:

答案 0 :(得分:35)

如果Ids是List,数组或类似的,则L2S将转换为包含。

如果Ids是IQueryable,只需在查询中使用它之前将其转换为列表。例如:

List<int> listOfIDs = IDs.ToList();  
var query =  
from st in dc.SomeTable  
where listOfIDs.Contains(st.ID)
select .....

答案 1 :(得分:30)

我也在努力解决这个问题。使用Any()代替

解决了我的问题
people.Where(x => ids.Any(id => id == x.ID))

答案 2 :(得分:0)

我很抱歉,但这里的答案对我不起作用,因为我正在进行动态类型。

我所做的是在一个效果很好的循环中使用“UNION”。方法如下:

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));
}