即使对于没有帖子的标签,也可以按标签计算帖子



在实体框架核心中,我有 3 个实体:

public class Post { 
  public Int32 PostId { get; set; }
  public virtual ICollection<PostTag> PostTags { get; set; } 
}
public class PostTag { 
  public Int32 PostId { get; set; } 
  public Int32 TagId { get; set; } 
  public virtual Post { get; set; }
  public virtual Tag { get; set; }
}
public class Tag { 
  public Int32 TagId { get; set; }
  public virtual ICollection<PostTag> PostTags { get; set; } 
}

我需要获取每个标签的帖子计数,所以我尝试了:

IQueryable<PostTag> postTags = context.PostTags.AsNoTracking();
var stats = await postTags
  .GroupBy(x => x.Tag)
  .Select(x => new {
    TagId = x.Key.Id,
    TagName = x.Key.Name
    PostCount = x.Count()
  }).ToListAsync();

问题是没有帖子的标签不会出现...

我希望它们以 PostCount = 0 出现。

我该怎么做?

在我看来,问题是你从PostTags开始,在这种情况下,大概没有任何记录PostTags; 似乎你想从Tags开始,然后从左到外到Posts。实际上:假设你有参照完整性,你甚至不需要去Posts——PostTags应该就足够了。所以。。。也许只是:

await context.Tags.AsNoTracking().Select(x => {
   x.TagId, PostCount = x.PostTags.Count() }).ToListAsync();

(对不起,如果 LINQ 生锈了 - - 我个人只会把它写成 SQL,所以我确切地知道正在执行什么 SQL(

相关内容

最新更新