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

LINQ到SQL谓词生成器

  •  9
  • JOBG  · 技术社区  · 17 年前

    我正在使用这里看到的PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspx ,一切都很好,现在我可以生成动态LINQ到SQL表达式,但我不明白的是,当我在这样一个循环中时:

    var inner = PredicateBuilder.False<MyType>();
    foreach (var f in Filtermodel.InstrumentsFilterList.Where(s => s.isActive))
            {
              int temp = f.InstrumentID;
              inner = inner.Or(ud => ud.InstrumentId == temp);
            }
    

    为什么我必须使用那个临时变量?我尝试使用“f”迭代器变量,但每次迭代它只得到列表上的最后一个值,就像它是通过引用传递的一样。。。

    2 回复  |  直到 17 年前
        1
  •  10
  •   Rex M    17 年前

        2
  •  2
  •   tvanfosson    17 年前

    因为它不是计算条件,而是简单地构建表达式。表达式绑定到foreach中定义的变量,该变量在整个循环的执行过程中保留其引用。用临时变量重新定义它会迫使每个表达式使用不同的变量,这会迫使它在每次迭代时使用值引用实例,而不是让所有迭代都引用单个引用并仅使用最后一次迭代的值。