C# 可解对象的Foreach循环问题

C# 可解对象的Foreach循环问题,c#,linq-to-sql,C#,Linq To Sql,我们可以对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 => (

我们可以对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));
}
query=Iqueryable=objDataContext.Myclass;//objDataContext是LINQ datacontext类的对象
int[]arr1=新的int[]{3,4,5};
foreach(arr1中的int i)
{
其中(q=>(q.f_id1==i | | q.f_id2==i | | q.f_id3==i));
}

如果每次更改时间值,它都会给我错误的输出。

每个时间值都不需要一个值,可以这样尝试:

query = objDataContext.Myclass.Where(q => (arr1.Contains(q.f_id1) || arr1.Contains(q.f_id2) || arr1.Contains(q.f_id3));
foreach (int i in arr1)
{
   int tmp = i;
   query = query.Where(q => (q.f_id1 == tmp || q.f_id2 == tmp || q.f_id3 == tmp));
}

这是因为“
i
”在您真正使用“迭代”查询集合之前不会进行计算。如果不是在那时,我相信“
i
”将是最后一个查询集合。

您面临的问题是延迟执行,您应该能够找到很多关于这方面的信息,但在实际尝试从IQueryable读取数据(将其转换为IEnumerable或List或其他类似操作)之前,基本上没有正在执行的代码。这意味着当我被设置为最终值时,这一切都发生在foreach完成之后

如果我没记错的话,您可以做的一件事是在for循环中初始化一个新变量,如下所示:

query = objDataContext.Myclass.Where(q => (arr1.Contains(q.f_id1) || arr1.Contains(q.f_id2) || arr1.Contains(q.f_id3));
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

什么“输出”之前不应更改该变量?这里没有输出任何内容…逻辑上,它将给出不正确的筛选器,请尝试在SQL中运行该查询!请看这两个查询是不同的:从MyClass中选择*,其中(f_id1=1或f_id2=1或f_id3=1)和(f_id1=3或f_id2=3或f_id3=3);从MyClass中选择*,其中(f_id1 in(1,3)或f_id2 in(1,3)或f_id3 in(1,3))