在QueryOver语句中使用foreach中的值

时间:2014-09-30 09:55:04

标签: c# .net closures queryover

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

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

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

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

编译器停止抱怨。

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

感谢您的任何见解!

1 个答案:

答案 0 :(得分:1)

我建议您阅读有关Closures的更多信息,您可以在链接的“代表(C#,D)”部分查看有关C#使用的更多详细信息