Linq To Sql Multiple Where 在 Foreach 循环中搜索

标签 linq linq-to-sql search foreach where

我正在尝试使用 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)
);

但是我必须在 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)
   );
}

当我这样做时,在 SQL 端查询参数是 @p0 = 35@p1 = 35 而不是 @p0 = 34@p1 = 35。我不知道为什么。

最佳答案

这是capturing the loop variable的另一种情况.只有一个 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));
}

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

关于Linq To Sql Multiple Where 在 Foreach 循环中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288238/

相关文章:

c# - 将 json 响应转换为列表

linq - 如何将Func与返回IOrderedQueryable的IQueryable一起使用

c# - System.Linq.Dynamic 和 Sql IN 运算符

java - 如何在eclipse java搜索中查找注解

asp.net - 标识列增量跳转

c# - 使用 LINQ 查询动态数据

sql - 指示 LINQ to Entities 生成与 Oracle 兼容的 SQL

c# - 如何将本地集合与 Linq-to-SQL 一起使用?

javascript - 如何在输入点击时触发搜索按钮?

php - 在 php 中的一个字段中输入值并将另一个字段留空会得到错误的结果