【发布时间】:2017-04-19 23:25:50
【问题描述】:
我有 3 个表,为简单起见,我将使用 IMDB 示例(用户评分电影)。
- 表 1:电影
- 表 2:MovieUserRating
- 表 3:用户。
电影(3 部电影):
ID MOVIE_NAME
1 Movie1
2 Movie2
3 Movie3
MovieUserRating(两个用户都只评价了电影 1):
MOVIE_ID USER_ID RATING
1 1 10
1 2 9
用户(2 个用户):
ID USER_NAME
1 User1
2 User2
因此,如果有任何用户登录(例如 User1),我需要执行 LINQ 查询,该查询将返回所有电影的列表和记录的用户对它们的评分。如果电影没有被登录用户评分,它将显示 0。
所以,我需要这样的结果(如果 user1 已登录):
MOVIE RATING
Movie1 10
Movie2 0
如果 user2 已登录:
MOVIE RATING
Movie1 9
Movie2 0
所以,这是我在 ASP.NET 控制器中的查询(不好):
var results =
from m in db.Movies
from mur in db.MoveUserRatings.Where( mur => mur.MOVIE_ID == m.ID).DefaultIfEmpty()
from u in db.Users.Where( u=>u.ID == mur.USER_ID).DefaultIfEmpty()
select new MyModelViewClass
{
MovieName = m.MOVIE_NAME,
MovieRating = (u.Id == “user ID that was supplied”) ? mur.RATING : 0
};
不幸的是,此查询返回 Movie1 两次,因为它已被两个用户评分。因此,结果如下所示:
(如果用户 1 已登录):
MOVIE RATING
Movie1 10
Movie1 0
Movie2 0
(如果 2 已登录):
MOVIE RATING
Movie1 9
Movie1 0
Movie2 0
如何解决此问题以获得所需的结果(电影 1 仅放映一次)?
提前感谢您的帮助。
【问题讨论】:
-
你需要
join你的条目stackoverflow.com/q/5537995/81053
标签: c# entity-framework linq join distinct-values