查询帮助:实体框架

时间:2013-07-08 12:01:35

标签: c# linq entity-framework

我的数据库中有这个表:

ID    userID  MovieID  Rank
1      1        1        9
2      1        2        9
3      1        3        9
4      2        1        9
5      2        2        10

我想查询它以获得他们评价相同的2个用户之间的互动电影。

例如,在这种情况下,用户1和用户2都将movieID = 1评为“9”。

所以我想在结果中只获得电影1。

- UPDATE -

所以我想出了这个(感谢@ 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)编写的吗?

2 个答案:

答案 0 :(得分: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)

如果您还需要验证费率来自不同的用户,则代替.Count() > 1使用.Select(x => x.UserID).Distinct().Count() > 1 - 此条件会从费率中选择不同的用户ID。

答案 1 :(得分:1)

方法:

从以下查询中,您将获得类似评分不止一个的特定电影的 MovieID 评分 Rate_Count

select MovieID,Rank,Count(*) Rate_Count
  from your_table
 group by MovieID,Rank
having Count(*) > 1