我有以下数据结构
我正在寻找一种找到彼此相似的文章的最快方法,但我想避免存储过程。
这是我到目前为止所做的,但我认为可以更快地完成。我想将一个INTegers数组作为谓词参数发送到sql对于sql查询计划来说并不是最优的,并且可以通过连接来实现。
有什么想法吗?
//get original article. we will seek articles similar to this one
var article = await ctx.Articles.AsNoTracking()
.Include(m => m.ArticleKeywords)
.SingleOrDefaultAsync(m => m.Id == articleId);
//get keyword ids
var keywordIds = article.ArticleKeywords.Select(m => m.KeywordId)
.ToList();
//find articles with at least 4 same keywords
var related = await
ctx.Articles
.AsNoTracking()
.WithSmallIncludes()
.Where(m => m.Active)
.Where(m => m.RootCategoryId == article.RootCategoryId)
.Where(m => m.Id != articleId)
.Where(m => m.ArticleKeywords.Count(akw => keywordIds.Contains(akw.KeywordId)) > 3)
.OrderByDescending(m => m.Id)
.Take(amount)
.ToListAsync();