2017-01-06 118 views
0

之間的最大resemblence我得到這個數據的基礎方案:enter image description hereLINQ查詢發現兩個對象

我想寫一個LINQ查詢,將(通過ID相同)與同類返回用戶在電影中的味道了一個給定的用戶名。基本上我需要找到另一個用戶觀看了與我的用戶相似的電影 - 「輸入用戶」(如果有多個用戶觀看最大金額,那麼我需要從列表中獲取第一個用戶),然後我需要向我的輸入用戶推薦發現的用戶觀看過的電影,並且他沒有按照「已發現」用戶對這些電影進行排名的排名順序排列。

我很迷茫......現在我得到了一個電影的結果集(以及它們從「輸入用戶」的UserMovieRank表中的排名),並且不知道如何繼續。

我的數據庫是SQL-SERVER 2008 R2中,如果它關係到人..

謝謝。

+0

電影類似的具有相同ID的電影..所以,如果用戶「A」看電影了:1111,2222,3333,4444和用戶「 B「觀看電影:2222,3333,但用戶」C「觀看:2222,3333,4444,5555,6666然後選擇用戶」C「,並且用戶用戶」A「將得到觀看電影5555和6666的推薦(命令他們顯示將受制於用戶C如何排列他們 - 從高到低(等級從1-10)),因爲他還沒有看他們。 – Tom

+1

有許多不同的算法用於比較最適合的對象。我會建議您在編寫任何代碼之前在網絡上搜索您想要使用的算法。現在你正在設計你的軟件,並沒有準備好開始編碼。 – jdweng

+0

比方說,最相似的用戶有一個完全相同的觀察名單......難道不是選擇其他人可以更好地推薦新電影嗎? ;) – grek40

回答

0

這將找到最佳匹配。你想要什麼,但它不是100%應該幫助您開始

var currentUserMovies=UserMovieRanks.Where(u=>u.userId==userId).Select(m=>m.movieId).ToList(); 

    var userMovieMatch = TwitterUsers.Where(u => u.userID != userId).Select(tu=> 
    { 
     var userMovies=UserMovieRanks.Where(u=>u.userId==tu.userID).Select(m=>m.movieId).ToList(); 
     return new { 
      MovieIds=userMovies, 
      Count=userMovies.Count(c=>currentUserMovies.Contains(c)), 
      NotWatchedByUser=userMovies.Except(currentUserMovies) 
     }; 
    }); 

    var bestPick=userMovieMatch.OrderByDescending(o=>o.Count).First();