Lamda 按类别和子类别统计总记录

Posted

技术标签:

【中文标题】Lamda 按类别和子类别统计总记录【英文标题】:Lamda count total records by category and subcategory 【发布时间】:2018-04-06 11:15:49 【问题描述】:

我有两个实体

类别

public class Category

  public int Id get; set;
  public int? ParentId get; set;
  public string Name get; set;
  public virtual ICollection<Document> Documents get; set;

文档

    public class Document
    
      public int Id get; set;
      public int CategoryId get; set;
      public string Name get; set;
      public virtual Category Category get; set;
    

如何按 categoryId 获取所有子类别的总文档?

示例

类别

Id  ParentId  Name

1   null      One
2   null      Two
3   1         One Live 1
4   3         One Live 2

文件

Id  CategoryId  Name

1   1         Document 1
2   2         Document 5
3   3         Document 2
4   4         Document 3

我想要获得全部文档一个。我应该得到 3 的总数

【问题讨论】:

至少尝试一下,我们可以帮助你 对不起,我更新了我的问题 【参考方案1】:

这应该可以工作

count = (from document in Documents
         join category in Categories 
         on document.CategoryId equals category.Id
         select document).Count();

【讨论】:

这不考虑子类别。 这个问题也没有?数据模型中的子类别在哪里? @Greg 这里有足够多的信息供您参考。 “我如何通过 categoryId 获取所有子类别的总文档? ParentId 指的是父类别。任何带有ParentId 的类别都是该父类别的子类别(请注意,cat 4 是 cat 3 的子类别,而 cat 3 又是 cat 1 的子类别,因此有多个级别的子类别) 这只是不同的解释,我认为一个文档是Category的一个子类,因为这符合他的数据模式。无论如何,他已经获得了一些示例 Linq,它至少提供了部分答案。 子类别不是文档。它是一个类别,根据单词 subcategory 的定义。【参考方案2】:
var count= (from c in this.db.categories
             join d in this.db.documents on c.id equals d.CategoryId
             select d).Count();

【讨论】:

这不考虑子类别。 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 它的长期价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。

以上是关于Lamda 按类别和子类别统计总记录的主要内容,如果未能解决你的问题,请参考以下文章

获取总类别树(所有类别及其子类别的列表)与根据需要获取每个分支?

为每个类别python选择前10条记录

访问表单和子表单

mongodb 分组统计: 按deviceId、tenant分组,统计总记录条数、求和workload

Django,类别和子类别

类别和子类别架构设计