2013-07-08 88 views
-8

我這個表我的DB:查詢幫助:實體框架

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額定電壓與「9」由兩個用戶1和用戶2。

所以想在結果只有電影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)寫?

+11

試過了什麼? – 2013-07-08 12:04:09

+0

是的。它不太好。謝謝 –

回答

1

方法:

從下面的查詢,你會得到MovieIDRate_Count針對特定電影類似的評級比一個多。

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

感嘆。在回答之前閱讀問題。他希望爲實體框架提供LINQ查詢。 SQL不會幫助他。 – Phill

+0

這對我也有幫助,我試圖找出它背後的邏輯,謝謝。 –

+0

@KobiBurnley是否存在實體框架之間的行? –

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。