gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:04:33 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com