使用LINQ to sql查找相关记录的有效方法

时间:2017-04-19 06:56:42

标签: c# sql-server entity-framework linq lambda

我有以下数据结构

  • 文章
  • 关键字
  • ArticleKeywords(关键词和文章之间的关系)

我正在寻找一种找到彼此相似的文章的最快方法,但我想避免存储过程。

这是我到目前为止所做的,但我认为可以更快地完成。我想将一个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();

0 个答案:

没有答案