在QueryOver语句中使用foreach中的值

本文关键字:foreach QueryOver 语句 | 更新日期: 2023-09-27 18:25:07

say我想迭代ID列表,并使用它们来比较QueryOver语句中的一些属性,如:

foreach(int id in myIdList)
{
    QueryOver<Tabe> query = QueryOver.Of<Table>()
      .Where(t => t.SomeForeignKey == id);
}

现在,我的编译器建议我为迭代器id创建一个额外的变量,否则它将被视为访问foreach变量的闭包。为了安全起见,我将代码调整为:

foreach(int id in myIdList)
{
    int id1 = id;
    QueryOver<Tabe> query = QueryOver.Of<Table>()
      .Where(t => t.SomeForeignKey == id1);
}

编译器停止了抱怨。

对于第一个版本,编译器说,语句的行为因编译器版本而异,所以我想知道在哪些情况下使用第一个表达式会被保存,以及为什么它会产生正确/不正确的结果。为什么最后使用第二个版本更好呢?

感谢您的真知灼见!

在QueryOver语句中使用foreach中的值

我建议您阅读更多关于闭包的信息,您可以在链接的"Delegates(C#,D)"部分看到更多关于C#中使用的详细信息