如何用LINQ实现列表中相同ID的NodeViewModel匹配分组?
用LINQ优化重复ID节点的合并逻辑
直接通过分组-筛选-投影的LINQ链式调用替代多层foreach,代码更简洁易读:
实现代码
// 从nodes列表生成合并后的IdNodeInteractionModel集合 var mergedNodeModels = nodes .GroupBy(node => node.ID) // 按NodeViewModel的ID分组 .Where(group => group.Count() == 2) // 只保留恰好包含两个实例的分组(匹配你的需求场景) .Select(group => new IdNodeInteractionModel { ID = group.Key, firstNode = group.First(), secondNode = group.Last() }) .ToList();
补充说明
- 如果需要控制两个节点的顺序(比如按某个属性排序),可以在Select前添加排序逻辑:
.Select(group => { var sortedNodes = group.OrderBy(n => n.排序属性名).ToList(); return new IdNodeInteractionModel { ID = group.Key, firstNode = sortedNodes[0], secondNode = sortedNodes[1] }; }) - 若存在ID重复超过2次的情况,可根据需求调整Where条件(比如
group.Count() >=2),再处理多余节点。
内容的提问来源于stack exchange,提问作者Ozgur Saklanmaz
相关产品推荐
相关产品推荐

