You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过LINQ从孙集合获取带层级结构的祖父集合问题

用LINQ从孙集合生成祖父对象集合的解决方案

嘿,我明白你遇到的问题了——想通过LINQ从孙对象集合里得到完整的GrandParentBLL对象集合,之前按祖父名称分组只拿到了字符串,对吧?我来给你捋捋可行的方案,先假设你的对象结构大概是这样(补全你没给出的关联部分,方便理解):

public class Parent {
    public int ID { get; set; }
    public GrandParentBLL GrandParent { get; set; } // 父指向祖父的导航属性
    public List<Child> Children { get; set; } // 子集合(也就是你的孙对象)
}

public class Child {
    public int ID { get; set; }
    public Parent Parent { get; set; } // 孙指向父的导航属性
}

场景1:获取去重后的祖父对象集合

如果你的孙集合里可能重复对应同一个祖父,想要得到每个祖父只出现一次的集合,可以这么写:

// 假设你有孙对象集合:List<Child> childrenList
var grandParents = childrenList
    .Select(child => child.Parent.GrandParent) // 从孙一路导航到祖父
    .Distinct() // 去重,注意:如果GrandParentBLL没重写Equals和GetHashCode,默认是按引用比较,可能需要按ID去重
    .ToList();

// 按ID去重的版本(更稳妥,避免引用比较的问题)
var grandParentsById = childrenList
    .Select(child => child.Parent.GrandParent)
    .GroupBy(gp => gp.ID)
    .Select(group => group.First()) // 每个ID组取第一个祖父对象
    .ToList();

场景2:还原完整的层级结构(祖父+关联的父和孙)

如果你不仅要祖父对象,还要把对应的父、孙也关联回去,还原完整的层级,可以用分组+构造的方式:

var grandParentsWithHierarchy = childrenList
    .GroupBy(child => child.Parent.GrandParent.ID) // 按祖父ID分组
    .Select(group => {
        // 拿到当前组对应的祖父对象(取第一个就行,同ID是同一个祖父)
        var grandParent = group.First().Parent.GrandParent;
        // 整理当前祖父下的父集合:按父ID分组,把孙集合关联到对应父
        var parents = group.GroupBy(child => child.Parent.ID)
            .Select(parentGroup => {
                var parent = parentGroup.First().Parent;
                parent.Children = parentGroup.ToList(); // 把当前组的孙赋值给父的Children属性
                return parent;
            })
            .ToList();
        grandParent.Parents = parents; // 把整理好的父集合赋值给祖父
        return grandParent;
    })
    .ToList();

为什么之前按名称分组只得到字符串?

你之前应该是写了类似GroupBy(child => child.Parent.GrandParent.Name)这样的代码,这样分组的键是字符串类型,如果后续只提取分组键的话,自然只能得到祖父名称的字符串集合。要拿到完整的祖父对象,得把分组键设为祖父对象本身或者它的唯一标识(比如ID),再从分组中提取对应的祖父对象。

另外提醒一句:如果你的导航属性可能为null,记得加上空值判断,比如用?.操作符避免空引用异常,比如child.Parent?.GrandParent。

内容的提问来源于stack exchange,提问作者Josip Skopljak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:14:28