我首先在代码中有多对多的关系:
public class Post
{
public int Id { get; set; }
public ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int Id { get; set; }
public ICollection<Post> Posts { get; set; }
}
modelBuilder.Entity<Post>().HasMany(c => c.Tags).WithMany(a => a.Posts);
如果我的Post
Tags
Tags
,我可以通过考虑MarkerView
获得最相关的帖子。
答案 0 :(得分:0)
有几种方法。我的建议是:
/app
答案 1 :(得分:0)
首先,您需要定义相关应该如何...
最简单的方法是简单地检查共享最多标签的帖子。我们需要为给定的帖子和其他帖子执行此操作。我不会详述理论,你的查询至少会是这样的:
IQueryable<Post> posts = context.Posts.Where(x => x.Id != currentPost.Id)
.OrderByDescending(x => x.Tags.Count(y => currentPost.Tags.Any(z => z.Id == y.Id)));
currentPost
是Post
的一个实例,我们想要检索其相关的Post
。计算在x.Tags.Count(y => currentPost.Tags.Any(z => z.Id == y.Id))
部分完成。它计算与currentPost
共享的标签数量。
有点复杂,你可以使用Jaccard Similarity。它只是将Post
对中相同标记的数量除以该对中的Tag
个总数。
int currentPostTagsCount = currentPost.Tags.Count();
IQueryable<Post> posts = context.Posts.Where(x => x.Id != currentPost.Id)
.OrderByDescending(x => x.Tags.Count(y => currentPost.Tags.Any(z => z.Id == y.Id))
/ (currentPostTagsCount + x.Tags.Count()));
免责声明:我没有测试过这个查询,带有谷物和盐 - 我会编辑,如果我有时间测试它不起作用。