按标签计数帖子,即使没有帖子的标签也是如此

时间:2019-04-04 13:56:50

标签: c# entity-framework-core linq-to-entities

在Entity Framework Core中,我有3个实体:

if (typeof(T) == typeof(int))
  Bar((int)(object)x);
else if (typeof(T) == typeof(string))
  Bar((string)(object)x);
else
  throw new Exception();

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

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; } 
}

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

我所看到的问题是您是从PostTags开始的,在这种情况下,PostTags中可能没有任何记录;似乎您想从Tags开始,然后从左外Posts。实际上:假设您具有参照完整性,那么您甚至不需要进入Posts-PostTags就足够了。所以...也许只是

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

(对不起,如果LINQ生锈--我个人只是将其写为SQL,所以我确切地知道正在执行什么SQL)