Linq分组遍历求助:GROUP BY转List后foreach循环无法正常运行
问题原因
你的代码报错核心是**GroupBy返回的不是单个Articulo集合,而是分组集合**。GroupBy(x => x.Clave)执行后,final的类型变成了IEnumerable<IGrouping<[Clave的类型], Articulo>>——每个元素是一个分组,包含分组键Key和该分组下的所有Articulo元素,你直接把它当成单个Articulo访问属性,自然会出错。
修正方案
根据你的实际需求,提供两种常见场景的代码:
场景1:每个分组只保留一个元素(比如第一个)
如果按Clave分组后,你只想每个分组取一个元素加入lista,可以在分组后用Select提取分组内的元素:
var final = finalv.Union(finalc) .GroupBy(x => x.Clave) .Select(group => group.First()); // 取分组第一个元素 foreach (var articulo in final) { lista.Add(new Articulo { ArtID = articulo.ArtID, Clave = articulo.Clave, ClaveAlterna = articulo.ClaveAlterna }); }
场景2:遍历每个分组的所有元素
如果需要把分组里的每一个Articulo都加入lista,需要嵌套遍历分组:
var groupedItems = finalv.Union(finalc).GroupBy(x => x.Clave); foreach (var group in groupedItems) { // 可按需获取分组键:var currentClave = group.Key; foreach (var articulo in group) { lista.Add(new Articulo { ArtID = articulo.ArtID, Clave = articulo.Clave, ClaveAlterna = articulo.ClaveAlterna }); } }
小优化:简化对象创建
如果Articulo支持拷贝构造函数,还能进一步简化:
// 假设Articulo有拷贝构造函数:public Articulo(Articulo source) { ... } lista.Add(new Articulo(articulo));
内容的提问来源于stack exchange,提问作者Cesar Oliver Jiménez
相关产品推荐
相关产品推荐

