如何使用实体框架对数据库中的嵌套集合进行计数

生产者的

我正在制作我的第一个Asp.net Mvc应用程序-论坛系统。我正在尝试显示子类别中有多少帖子和主题。

这是我的表:

public class Category
{
   private ICollection<SubCategory> subCategories;

   public Category()
   {
       this.subCategories = new HashSet<SubCategory>();
   }

   public int Id { get; set; }

   public string Name { get; set; }

   public virtual ICollection<SubCategory> SubCategories
   {
       get { return this.subCategories; }
       set { this.subCategories = value; }
   }                          
}


public class SubCategory
{
    private ICollection<Thread> threads;

    public SubCategory()
    {
        this.threads = new HashSet<Thread>();
    }

    public int Id { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

    public int CategoryId { get; set; }

    public virtual Category Category { get; set; }

    public virtual ICollection<Thread> Threads
    {
        get { return this.threads; }
        set { this.threads = value; }
    }
}


public class Thread
{
    private ICollection<Post> posts;

    public Thread()
    {
        this.posts = new HashSet<Post>();
    }

    public int Id { get; set; }

    public string Title { get; set; }

    public virtual SubCategory SubCategory { get; set; }

    public int SubCategoryId { get; set; }

    public virtual ICollection<Post> Posts
    {
        get { return this.posts; }
        set { this.posts = value; }
    }

    public string AuthorId { get; set; }

    public virtual ApplicationUser Author { get; set; } 
}


public class Post
{
    public int Id { get; set; }

    public string Content { get; set; }

    public int ThreadId { get; set; }

    public virtual Thread Thread { get; set; }

    public string AuthorId { get; set; }

    public virtual ApplicationUser Author { get; set; }
}

这是我的看法:

    @model IEnumerable<ForumSystem.Web.ViewModels.Home.IndexCategoryViewModel>
@{
    ViewBag.Title = "Home Page";
}

<div class="container">
    @foreach (var category in Model)
    {
        <div class="row">
            <h5>@category.Name</h5>

            @foreach (var subCat in category.SubCategories)
            {
                <div class="col-md-10">
                    <div class="row">
                        <h7>
                            <a href="/SubCategory/@subCat.Title">@subCat.Title</a>
                        </h7>
                    </div>
                    <div class="row">
                        <p>@subCat.Description</p>
                    </div>
                </div>
                <div class="col-md-2">
                        <p>@category.ThreadsCount threads</p>
                        <p>@category.PostsCount posts</p>
                    <div class="row">

                    </div>
                </div>
            }
        </div>
    }
</div>

@ category.ThreadsCount和PostsCount不起作用。我可以使用@ subCategory.Threads.Count轻松查看线程数,但无法获取帖子数。在控制器中,我尝试了很多事情。目前的代码是:

public ActionResult Index()
    {
        var threadScount = this.Data
                           .SubCategories
                           .All()
                           .SelectMany(x => x.Threads)
                           .Count();

        var postsCount = this.Data
                        .Threads
                        .All()
                        .SelectMany(x => x.Posts)
                        .Count();

        var model = this.Data
                    .Categories
                    .All()
                    .Select(c => new IndexCategoryViewModel
                    {
                        Name = x.Name,
                        SubCategories = c.SubCategories,
                        ThreadsCount = threadScount,
                        PostsCount = postsCount,
                    })
                    .ToList();


        return this.View(model);
    }

但这给了我所有线程和帖子数,而不是每个子类别都特定。提前致谢。

用户名

创建表示您要显示的视图的视图模型

public class SubCategoryVM
{
  public string Title { get; set; }
  public string Description { get; set; }
  public int ThreadsCount { get; set; }
  public int PostCount { get; set; }
}

public class CategoryVM
{
  public string Name { get; set; }
  public List<SubCategoryVM> SubCategories { get; set; }
}

控制器

public ActionResult Index()
{
  var model = this.Data.Categories.Select(c => new CategoryVM
  {
    Name = c.Name,
    SubCategories = c.SubCategories.Select(s => new SubCategoryVM
    {
      Title = s.Title,
      Description = s.Description,
      ThreadsCount = s.Threads.Count,
      PostsCount = s.Threads.SelectMany(t => t.Posts).Count;
    })
  });
  return View(model);
}

看法

@model IEnumerable<CategoryVM>
@{
  ViewBag.Title = "Home Page";
}

<div class="container">
  @foreach (var category in Model)
  {
    <div class="row">
      <h5>@category.Name</h5>
      @foreach (var subCategory in category.SubCategories)
      {
        <div class="col-md-10">
          <div class="row">
            <h7>
              // The following line in your view makes no sense
              // <a href="/SubCategory/@subCat.Title">@subCat.Title</a>
              // Assuming you have method: public ActionResult Details(string title) in SubCategoryController, then
              @Html.ActionLink(subCategory.Title, "Details", "SubCategory", new { title = subCategory.Title }, null)
            </h7>
          </div>
          <div class="row">
            <p>@subCategory.Description</p>
          </div>
        </div>
        <div class="col-md-2">
          <p><span>@subCategory.ThreadCount</span><span>threads</span></p>
          <p><span>@subCategory.PostCount</span><span>posts</span></p>
        </div>
      }
    </div>
  }
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用实体框架计算数据库中的嵌套集合

来自分类Dev

我可以在LINQ中对数据库实体使用嵌套查询吗?

来自分类Dev

如何使用实体框架提供程序创建审计数据库表?

来自分类Dev

从数据库搜索并使用实体框架进行排序

来自分类Dev

如何先使用代码在不进行迁移的情况下在实体框架中应用数据库架构更改

来自分类Dev

使用实体框架从数据库中检索数据

来自分类Dev

如何首先使用实体框架数据库检索模型中的导航数据

来自分类Dev

如何使用实体框架从DataGrid更新数据库

来自分类Dev

使用DTO实体框架,如何更新数据库?

来自分类Dev

如何使用数据库第一实体框架+ Catel

来自分类Dev

使用实体框架从数据库中删除相关对象

来自分类Dev

使用实体框架核心更新数据库中的列

来自分类Dev

使用实体框架和存储库模式在SQLite和SQL Server数据库中同时进行数据操作

来自分类Dev

实体框架:如何在向数据库添加或更新数据的过程中包括嵌套子级

来自分类Dev

使用实体框架将新对象的子集合和我的新对象添加到数据库中

来自分类Dev

使用实体框架时,在同一数据库行程中获取总计数和页行

来自分类Dev

使用实体框架时,在同一数据库行程中获取总计数和页行

来自分类Dev

如何使用实体框架数据库首先自动生成的代码中的接口

来自分类Dev

使用实体框架时如何在模型中写入属性数据库优先

来自分类Dev

使用实体框架时如何在模型中写入属性数据库优先

来自分类Dev

如何使用实体框架核心1.0从ASP.MVC核心的数据库中读取记录

来自分类Dev

创建使用数据库优先模型后,如何在实体框架中设置由数据库在数据库中生成的ID密钥

来自分类Dev

如何对数据库中的多个输入使用插入

来自分类Dev

如何通过DateTimeField()使用Django ORM对Postgresql数据库中的项目进行计数

来自分类Dev

如何使用实体框架从数据库视图加载相关实体?

来自分类Dev

如何在实体框架中使用数据库优先方法使用存储库模式

来自分类Dev

使用实体框架进行持续交付和数据库模式更改

来自分类Dev

使用实体框架进行部署后数据库更改的最佳实践

来自分类Dev

如何使用 ASP.NET MVC 剃刀中的实体框架检查数据库中是否存在记录?

Related 相关文章

  1. 1

    如何使用实体框架计算数据库中的嵌套集合

  2. 2

    我可以在LINQ中对数据库实体使用嵌套查询吗?

  3. 3

    如何使用实体框架提供程序创建审计数据库表?

  4. 4

    从数据库搜索并使用实体框架进行排序

  5. 5

    如何先使用代码在不进行迁移的情况下在实体框架中应用数据库架构更改

  6. 6

    使用实体框架从数据库中检索数据

  7. 7

    如何首先使用实体框架数据库检索模型中的导航数据

  8. 8

    如何使用实体框架从DataGrid更新数据库

  9. 9

    使用DTO实体框架,如何更新数据库?

  10. 10

    如何使用数据库第一实体框架+ Catel

  11. 11

    使用实体框架从数据库中删除相关对象

  12. 12

    使用实体框架核心更新数据库中的列

  13. 13

    使用实体框架和存储库模式在SQLite和SQL Server数据库中同时进行数据操作

  14. 14

    实体框架:如何在向数据库添加或更新数据的过程中包括嵌套子级

  15. 15

    使用实体框架将新对象的子集合和我的新对象添加到数据库中

  16. 16

    使用实体框架时,在同一数据库行程中获取总计数和页行

  17. 17

    使用实体框架时,在同一数据库行程中获取总计数和页行

  18. 18

    如何使用实体框架数据库首先自动生成的代码中的接口

  19. 19

    使用实体框架时如何在模型中写入属性数据库优先

  20. 20

    使用实体框架时如何在模型中写入属性数据库优先

  21. 21

    如何使用实体框架核心1.0从ASP.MVC核心的数据库中读取记录

  22. 22

    创建使用数据库优先模型后,如何在实体框架中设置由数据库在数据库中生成的ID密钥

  23. 23

    如何对数据库中的多个输入使用插入

  24. 24

    如何通过DateTimeField()使用Django ORM对Postgresql数据库中的项目进行计数

  25. 25

    如何使用实体框架从数据库视图加载相关实体?

  26. 26

    如何在实体框架中使用数据库优先方法使用存储库模式

  27. 27

    使用实体框架进行持续交付和数据库模式更改

  28. 28

    使用实体框架进行部署后数据库更改的最佳实践

  29. 29

    如何使用 ASP.NET MVC 剃刀中的实体框架检查数据库中是否存在记录?

热门标签

归档