如何加入 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 来检查每个 Category
的 Post
的计数并按此排序标准:
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 和 Post
和 Caterogy
之间创建两个一对多关系。
谢谢奥克塔维奥,
我现在有了想法,我可以很容易地做到这一点。
public List<Category> GetPopularCategories()
{
return _categoryRepository.GetAll().OrderBy(c => c.Posts.Count).ToList();
}
我有两个模型,它们是
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 来检查每个 Category
的 Post
的计数并按此排序标准:
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 和 Post
和 Caterogy
之间创建两个一对多关系。
谢谢奥克塔维奥,
我现在有了想法,我可以很容易地做到这一点。
public List<Category> GetPopularCategories()
{
return _categoryRepository.GetAll().OrderBy(c => c.Posts.Count).ToList();
}