首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使linq中的子级计数到实体查询

使linq中的子级计数到实体查询
EN

Stack Overflow用户
提问于 2012-10-18 07:32:01
回答 3查看 4.5K关注 0票数 2

我的数据库(MySql)中的两个表之间有很多到多个关系:

  • 类别(id、name、id_parent)
  • 声音(id,名字)

一个类别可以有一个父类别,所以一个类别可以有许多子类别。如果一个类别至少有一个孩子,它里面就没有声音。我不允许声音和儿童分类在一起。

因此,对于一个家长类别,我想让所有可能有孩子的孩子(.)我想对所有孩子的声音进行递归计数。

例:

猫-> (CCat1 -> CCCat11(2音),CCat2 (5音),CCat3 -> CCat31 -> CCCat311 -> (10音),CCCCat3111 (1音))

没有深度限制,这就是为什么我需要一种“递归”的方法来计算声音。

  • 猫有3个孩子。
  • CCat1有1个孩子。
  • CCat2没有孩子。
  • CCat3有一个孩子,一个孩子,两个孩子。

Cat.nbSounds = 18

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-20 15:57:42

经过更多的研究,我们似乎不能做我想做的事。

因此,我创建了一个递归方法,用于检索子类并计算每个类别中的声音数(我计算类别中的声音或计数类别、子类别、声音数量)。

如果你找到了一种神奇的方法,无论如何,与linq对实体,我接受它!

票数 0
EN

Stack Overflow用户

发布于 2012-10-18 08:19:03

答案在于SelectMany操作符的用户。

代码语言:javascript
运行
复制
int count_soundsinparent = parentCategory
    .Select(x=> x.ChildCategory)
    .SelectMany(x=> x.Sounds)
    .Count();

假设您使用了一个常规的Select;它将返回一个声音列表(每个子类别一个项)的声音列表(每个子类别有一个项),从而创建一个二维列表。

SelectMany所做的就是获取列表中的所有元素,并将其放在一个一维列表中。然后你数一下清单上的物品,瞧,你就有了总数。

票数 4
EN

Stack Overflow用户

发布于 2012-10-18 08:23:58

递归地

这个要求意味着您不会在一个LINQ查询中执行这个任务。Linq实际上不能用linq来表示对象的递归查询,更不用说更多的comlex提供程序,比如Linq到实体。

有了您描述的模式,您最好编写一个存储过程。如果您有一个嵌套的集合模型,您可能可以对左边和右边数做一些数学处理,但可能没有这些额外的规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12949382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档