2017-01-06 3 views
0

Я получил эти данные базовую схему: enter image description hereLinq запрос, чтобы найти максимальное сходство и между двумя объектами

Я пытаюсь написать запрос Linq, который будет возвращать пользователь с одинаковым (Идентичным по ID) вкусам в кино для данное имя пользователя. в основном мне нужно найти другого пользователя, который просмотрел столько похожих фильмов, как мой данный пользователь - «Входной пользователь» (если есть несколько пользователей, которые смотрят максимальную сумму, тогда мне нужно взять первого пользователя из списка), затем Мне нужно рекомендовать моему входному пользователю фильмы, которые наблюдаемый пользователь наблюдал, и он не был в порядке убытков в соответствии с рангом, который «найденный» пользователь оценил в этих фильмах.

Я совсем потерял .. к настоящему времени я получил результирующий набор для фильмов (и их рейтинг из таблицы UserMovieRank «Входного пользователя») и понятия не имею, как действовать.

Моя база данных находится в SQL-Server 2008 R2, если это важно для тех, кто ..

Спасибо.

+0

фильмов похожи являются фильмами с таким же идентификатором .. так что если пользователь «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(); 
Смежные вопросы