C# Linq查询以查找两个对象之间的最大相似性
我得到了这个数据库方案: 我正在尝试编写一个Linq查询,该查询将返回在给定用户名的电影中具有相似(ID相同)品味的用户。基本上,我需要找到另一个用户,该用户观看的电影与我的给定用户“Input User”(如果有多个用户观看了最多的电影,那么我需要从列表中选择第一个用户),然后,我需要向我的输入用户推荐那些被发现的用户看过的电影,并且根据“被发现的”用户对这些电影的排名,他没有按照降序排列 我完全迷路了。。到现在为止,我已经得到了电影的结果集(以及它们在“输入用户”的UserMovieRank表中的排名),并且不知道如何继续 我的数据库在SQL-SERVER 2008 R2中,如果它对任何人都重要的话C# Linq查询以查找两个对象之间的最大相似性,c#,sql-server,linq,C#,Sql Server,Linq,我得到了这个数据库方案: 我正在尝试编写一个Linq查询,该查询将返回在给定用户名的电影中具有相似(ID相同)品味的用户。基本上,我需要找到另一个用户,该用户观看的电影与我的给定用户“Input User”(如果有多个用户观看了最多的电影,那么我需要从列表中选择第一个用户),然后,我需要向我的输入用户推荐那些被发现的用户看过的电影,并且根据“被发现的”用户对这些电影的排名,他没有按照降序排列 我完全迷路了。。到现在为止,我已经得到了电影的结果集(以及它们在“输入用户”的UserMovieRank
谢谢。这将找到最匹配的。这不是你想要的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();
类似电影是具有相同ID的电影。。因此,如果用户“A”观看了电影:1111222233334444,用户“B”观看了电影:22223333,但用户“C”观看了电影:22223344556666,那么用户“C”将被选中,用户“A”将得到观看电影5555和6666的推荐(显示顺序取决于用户C对它们的排名——从高到低(排名从1到10))因为他还没有看。有很多不同的算法来比较物体的最佳拟合度。我建议在编写任何代码之前,在web上搜索您想要使用的算法。现在你正在设计你的软件,还没有准备好开始编码。假设最相似的用户有一个相同的观察列表。。。那么,选择其他人来推荐新电影不是更好吗?;)