查询帮助:实体框架
本文关键字:框架 实体 帮助 查询 | 更新日期: 2023-09-27 18:21:40
我的数据库中有这个表:
ID userID MovieID Rank
1 1 1 9
2 1 2 9
3 1 3 9
4 2 1 9
5 2 2 10
我想查询它,以获得两个用户之间的相互电影,他们的评分相同。
例如,在这种情况下,movieID=1被用户1和用户2都评为"9"。
所以我只想得到电影1的结果。
--更新--
所以我想出了这个(感谢@RJ1990)
SELECT MovieID
FROM LoverMovie
WHERE (LoverID = 1) OR
(LoverID = 2)
GROUP BY MovieID
HAVING (COUNT(*) > 1) AND (ABS(MAX(Rank) - MIN(Rank)) < 3)
这种查询可以用EF(DbContext)编写吗?
方法:
从下面的查询中,您将获得相似评分超过一个的特定电影的MovieID、Rate和Rate_Count。
select MovieID,Rank,Count(*) Rate_Count
from your_table
group by MovieID,Rank
having Count(*) > 1
目前还不清楚您尝试了什么以及面临了什么问题。但这个查询返回的电影有不止一票:
from m in db.Movies // assume you have Movies table
join mr in db.MovieRates
on m.ID equals mr.MovieID into g // and MovieRates table
where g.Count() > 1
select m
或者,如果您定义了导航属性:
db.Movies.Where(m => m.Rates.Count() > 1)
如果您还需要验证费率是否来自不同的用户,则使用.Select(x => x.UserID).Distinct().Count() > 1
而不是.Count() > 1
——此条件从费率中选择不同的用户ID。