所以,我试图返回的人,其ID包含ID的本地创建的集合中的一个集合(IQueryable的)
当我指定的“本地创建集”,我的意思是IDS收集处理不当来自LinqToSql查询,并已通过编程创建(根据用户输入)。 我的查询如下所示:
var qry = from p in DBContext.People
where Ids.Contains(p.ID)
select p.ID;
这将导致以下异常...
“与当地馆藏查询,不支持”
我怎样才能找到所有的ID,它是包含我的本地创建的ID集合中的人?
是否有可能使用LinqToSql?
如果IDS是一个列表,阵列或类似的,L2S将转化为一个包含。
如果IDS是一个IQueryable的,只是把它变成一个列表中查询使用它之前。 例如:
List<int> listOfIDs = IDs.ToList();
var query =
from st in dc.SomeTable
where listOfIDs.Contains(st.ID)
select .....
我被这个问题也正在努力。 解决我的问题,使用任何()代替
people.Where(x => ids.Any(id => id == x.ID))
正如上面提到的球员,转换的ID,这是类型的IQueryable到列表或数组将解决这一问题,这将被转换为“IN”操作者在SQL.But要小心,因为如果ID的计数> = 2100这个意愿导致另一个问题是“该服务器最多支持2100个参数”,这是可以传递给“IN”在SQL服务器的参数(值)的最大数量。
另一种方法是保持ID作为IQueryable的使用LINQ“任何”操盘手“包含”,SQL Server中的“存在”,这将被翻译。
我很抱歉,但答案在这里,因为我再往前做动态类型并没有为我工作。
我所做的就是在一个循环的伟大工程使用“联盟”。 这是如何做:
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));
}
文章来源: Working around LinqToSQls “queries with local collections are not supported” exception