如何加入 Table 数据 Entity Framework

How to Get Joined Table Data Entity Framework

我有两个模型,它们是

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string ShortDescription { get; set; }
    public string PostImage { get; set; }
    public string Thumbnail { get; set; }
    public DateTime CreatedDate { get; set; }
    public DateTime? PublishedDate { get; set; }
    public string  CreatedBy { get; set; }

    public virtual ICollection<Category> Categories { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Post> Posts { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
}

然后生成 CategoryPosts table。

这是我的问题:我想从 CategoryPosts table 中获取数据来计算热门类别。我怎样才能得到这些数据?最好的方法是什么?

如果想要热门分类不需要映射交点table,可以按post的数量排序Categories:

var query=yourContext.Categories.OrderBy(c=>c.Posts.Count);

如果您禁用了延迟加载,那么您应该在之前调用 Include 方法:

var query=yourContext.Categories.Include(c=>c.Posts).OrderBy(c=>c.Posts.Count);

正如您在下面看到的,生成的 SQL 代码使用联结点 table 来检查每个 CategoryPost 的计数并按此排序标准:

SELECT 
[Project1].[Id] AS [Id], 
[Project1].[Name] AS [Name]
FROM ( SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Name] AS [Name], 
    (SELECT 
        COUNT(1) AS [A1]
        FROM [dbo].[PostCategories] AS [Extent2]
        WHERE [Extent1].[Id] = [Extent2].[Category_Id]) AS [C1]
    FROM [dbo].[Categories] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[C1] ASC

结点 table 通常在您需要添加额外的列时被映射(不包括您要加入的 table 的两个键)。在这种情况下,您需要分别在结点 table 和 PostCaterogy 之间创建两个一对多关系。

谢谢奥克塔维奥,

我现在有了想法,我可以很容易地做到这一点。

   public List<Category> GetPopularCategories()
    {
     return _categoryRepository.GetAll().OrderBy(c => c.Posts.Count).ToList();
    }