场景: 我有一个数据库表,它存储另一个表的多对多关系的层次结构。一项可以有多个子项,也可以有多个父项。
Items
------
ItemID (key)
Hierarchy
---------
MemberID (key)
ParentItemID (fk)
ChildItemID (fk)
层次结构示例:
Level1 Level2 Level3
X A A1
A2
B B1
X1
Y C
我想按层次结构中的每个父节点对所有子节点进行分组。
Parent Child
X A1
A2
B1
X1
A A1
A2
B B1
X1
Y C
- 请注意 Parent 列中没有叶节点,而 Child 列如何仅包含叶节点。
- 理想情况下,我希望结果采用 IEnumerable<
IGrouping<
的形式Item, Item>>,其中键是 Parent,组项都是 Children。 - 理想情况下,我想要一个实体提供者可以将其转换为 T-SQL 的解决方案,但如果这不可能,那么我需要将往返次数保持在最低限度。
- 我打算对叶节点上连接的另一个表中存在的值求和。
最佳答案
既然您总是要返回表中的所有项目,为什么不直接创建一个递归方法来获取父级的所有子级,然后在内存中的项目上使用它:
partial class Items
{
public IEnumerable<Item> GetAllChildren()
{
//recursively or otherwise get all the children (using the Hierarchy navigation property?)
}
}
然后:
var items =
from item in Items.ToList()
group new
{
item.itemID,
item.GetAllChildren()
} by item.itemID;
对于任何语法错误,我们深表歉意...
关于linq - 递归 Linq 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205777/