在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出现。
我该怎么做?
答案 0 :(得分:2)
我所看到的问题是您是从PostTags
开始的,在这种情况下,PostTags
中可能没有任何记录;似乎您想从Tags
开始,然后从左外到Posts
。实际上:假设您具有参照完整性,那么您甚至不需要进入Posts
-PostTags
就足够了。所以...也许只是
await context.Tags.AsNoTracking().Select(x => {
x.TagId, PostCount = x.PostTags.Count() }).ToListAsync();
(对不起,如果LINQ生锈--我个人只是将其写为SQL,所以我确切地知道正在执行什么SQL)