Linq To Sql 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< /code>、@p1 = 35
而不是 @p0 = 34
、@p1 = 35
。我不知道为什么。
I'm trying to filter a table using where clause. When I the write the queries separately they work fine:
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)
);
However I have to use it in a foreach
loop:
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)
);
}
When I do that, on the SQL side the query parameters are @p0 = 35
, @p1 = 35
instead of @p0 = 34
, @p1 = 35
. I don't know why.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是 捕获循环变量。所有 lambda 表达式都会捕获一个
genre_id
变量。通过在每次迭代中引入一个新变量并捕获该变量来修复很容易:在 C# 5 中,这可能是不必要的 - 行为很可能正在改变。
It's another case of capturing the loop variable. There's only one
genre_id
variable which is captured by all the lambda expressions. It's easy to fix by introducing a new variable on each iteration, and capture that instead:In C# 5 this may be unnecessary - the behaviour may well be changing.
也许您正在寻找类似的内容,
它应该翻译为
IN ( 34, 35, 36)
Probably you are looking something like this
it should translates to
IN ( 34, 35, 36)