目标是获取10部热门电影的列表。
数据库中有一个名为populars
的表,其中包含:
moviecount
- 电影出租的次数。
MovieID
- 电影的身份。
还有一个名为Movies的表格,其中包含电影的所有数据。该表包含MovieID的字段。 这些表不相关,不应在它们之间链接。
我拍了10部最受欢迎的电影
var TopTen = videoLibDB.populars
.Take(10)
.OrderBy(e => e.movieCount)
.Select(e => new { e.MovieID });
这没关系,但如何使用populars表的10个MovieID(上面代码的TopTen)从“电影”表创建10部最佳电影的列表?
如果是一个id,我可以将流行表中的moiveid与movie表中的movieid进行比较。
答案 0 :(得分:2)
首先,确保在拍摄前排序(OrderBy)。在LINQ to SQL / EF中,这可能并不重要,但是对于LINQ to Objects,它只会导致前10行被评估。
其次,您需要将影片加入电影,或使用表格之间的关联。假设您有关联设置,您应该能够执行以下操作:
var TopTen = videoLibDB.populars
.OrderByDescending(e => e.movieCount)
.Take(10)
.Select(e => new { e.MovieID, e.Movie.MovieName});
答案 1 :(得分:2)
如果您正确设置了关系,@ JimWooley上面的答案是最简单/最好的,如果您没有这种可能性,则会出现此查询。
您的linq查询中存在一些问题,您需要拍摄10部随机电影并仅对其进行排名,最不受欢迎。此查询修复了该问题并将其与电影表连接以获得最受欢迎的电影;
var query =
from movie in videoLibDB.movies
where
videoLibDB.populars
.OrderByDescending(x => x.movieCount) // Sort all, most popular first
.Take(10) // but only keep the 10 first
.Select(x => x.MovieID) // Take their MovieID
.Contains(movie.MovieID) // and get movie data on them
select movie;
答案 2 :(得分:0)
试试这个,它应该生成一个IN
子句。
var results = from q in videoLibDB.movies
where videoLibDB.populars
.OrderBy(e => e.movieCount)
.Take(10)
.Select(e => e.MovieID)
.ToArray()
.Contains(q.MovieID)
select q
答案 3 :(得分:0)
使用.Contains
首先创建一个包含ID ....
的数组var ids = new[] { 1,2,3,4,5,6,7,8,9,10 };
然后使用.Contains
var TopTen = videoLibDB.populars
.Where(e => ids.Contains(e.MovieID)
.OrderBy(e => e.movieCount)
.Select(e => new { e.MovieID });
它相当于T-SQL中的IN语句
答案 4 :(得分:0)
我不明白为什么你有这样的限制,表格可能没有链接......但是嘿......
var TopTen = videoLibDB.populars
.OrderBy(e => e.movieCount)
.Take(10)
.Select(e => e.MovieID).ToArray();
var YourActualMovies = videoLibDB.movies
.Where(x=>TopTen.Conatins(x.MovieID))
.Select(...whatever you want...)