linq - 递归 Linq 分组

标签 linq entity-framework linq-to-entities

场景: 我有一个数据库表,它存储另一个表的多对多关系的层次结构。一项可以有多个子项,也可以有多个父项。

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/

相关文章:

c#-4.0 - 无法让 EntityFunctions.TruncateTime() 工作

c# - 在List<T>中选择整周没有休息日的记录 - C#

linq - IronPython 的表达式树

c# - 如何在代码优先映射中指定 1-1 关系的主体端

c# - AutoMapper.Collection.EntityFramework 在 Persist.InsertOrUpdate 之后导致 InvalidOperationException

c# - 获取 List<class> 形式的子集合

c# - 以 JSON 形式返回 Entity Framework 结果

c# - 如何在 LINQ 中对一个未指定的数字使用多个 OrderBy?

c# - Npgsql EntitiyFramework 无法将记录添加到只有一个整数作为主键的表中

silverlight - 使用 Silverlight 在 RIA 服务中用一 block 石头杀死两只鸟