代码之家  ›  专栏  ›  技术社区  ›  Vikas

iqueable对象的foreach循环问题

  •  3
  • Vikas  · 技术社区  · 15 年前

    我们可以使用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));
    }
    

    如果我被改变了,它会给我错误的输出。

    3 回复  |  直到 15 年前
        1
  •  3
  •   fyjham    15 年前

    您面临的问题是延迟执行,您应该能够找到很多关于这方面的信息,但基本上没有正在执行的代码,直到您真正尝试从iQuery读取数据(将其转换为IEnumerable、List或其他类似操作)。这意味着当我设置为最终值时,这一切都发生在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 .

        2
  •  1
  •   alejandrobog    15 年前

    你不需要每个人都有一个,试着这样做:

    query = objDataContext.Myclass.Where(q => (arr1.Contains(q.f_id1) || arr1.Contains(q.f_id2) || arr1.Contains(q.f_id3));
    
        3
  •  0
  •   Oscar Cabrero    15 年前

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