我们可以为 IQueryable
对象使用 foreach 循环吗?
我想做如下事情:
query = IQueryable<Myclass> = objDataContext.Myclass; // objDataContext is an object of LINQ datacontext class
int[] arr1 = new int[] { 3, 4, 5 };
foreach (int i in arr1)
{
query = query.Where(q => (q.f_id1 == i || q.f_id2 == i || q.f_id3 == i));
}
每次更改 i
的值时,我都会得到错误的输出。
最佳答案
您面临的问题是延迟执行,您应该能够找到很多这方面的信息,但基本上没有任何代码正在执行,直到您真正尝试从 IQueryable 读取数据(将其转换为 IEnumerable或列表或其他类似操作)。这意味着当 i 设置为最终值时,这一切都发生在 foreach 完成之后。
如果我没记错的话,您可以做的一件事是在 for 循环中初始化一个新变量,如下所示:
foreach (int i in arr1)
{
int tmp = i;
query = query.Where(q => (q.f_id1 == tmp || q.f_id2 == tmp || q.f_id3 == tmp));
}
通过将其放入每个循环重新创建的新变量中,在执行 IQueryable
之前不应更改该变量。
关于c# - IQueryable对象的foreach循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963583/