Linq到Sql多个搜索Foreach循环的地方

Bug*_*llu 3 linq foreach search where linq-to-sql

我正在尝试使用where子句过滤表.当我单独编写查询时,它们工作正常:

IQueryable<Movie> movies = db.Movies;
movies = movies.Where(movie =>
    movie.MovieToGenres.Any(genreItem => genreItem.Genre_ID == 34)
);
movies = movies.Where(movie =>
    movie.MovieToGenres.Any(genreItem => genreItem.Genre_ID == 35)
);
Run Code Online (Sandbox Code Playgroud)

但是我必须在foreach循环中使用它:

List<int> genre_ids = new List<int>();
genre_ids.Add(34);
genre_ids.Add(35);

IQueryable<Movie> movies = db.Movies;
foreach (var genre_id in genre_ids)
{
   movies = movies.Where(movie =>
       movie.MovieToGenres.Any(genreItem => genreItem.Genre_ID == genre_id)
   );
}
Run Code Online (Sandbox Code Playgroud)

当我这样做,SQL一边的查询参数@p0 = 35,@p1 = 35而不是@p0 = 34,@p1 = 35.我不知道为什么.

Jon*_*eet 5

这是捕获循环变量的另一种情况.genre_id所有lambda表达式只捕获一个变量.通过在每次迭代中引入一个新变量很容易修复,并捕获它:

foreach (var genre_id in genre_ids)
{
   int genreCopy = genre_id;
   movies = movies.Where(movie => movie.MovieToGenres.Any(
                  genreItem => genreItem.Genre_ID == genreCopy));
}
Run Code Online (Sandbox Code Playgroud)

在C#5中,这可能是不必要的 - 行为可能正在改变.

  • +1"在C#5中,这可能是不必要的 - 行为可能正在改变." 随着*访问修改后的闭包*问题的数量,让我们希望如此:) (2认同)