使用Linq将GROUP BY转换为列表〈>

xdnvmnnf  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(233)

我是第一次使用Linq,所以我不了解它的语法。我想对一个列表进行分组,然后用foreach循环遍历它,就像下面我的逻辑一样。显然我的逻辑不起作用。
我的代码:

var final = finalv.Union(finalc);
final = final.GroupBy(x => x.Clave);

foreach (var articulo in final)
{
    Articulo articulo2 = new Articulo();
    articulo2.ArtID = articulo.ArtID;
    articulo2.Clave = articulo.Clave;
    articulo2.ClaveAlterna = articulo.ClaveAlterna;
    lista.Add(articulo2);
}
xtfmy6hx

xtfmy6hx1#

首先,这种用法在语法上与GroupBy的重载方法一致:GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>),它将返回一个IEnumerable<IGrouping<TKey,TSource>>变量。
这意味着,如果运行final.GroupBy(x => x.Clave),假设他返回finalWithGrouped,那么finalWithGrouped.Key是键,finalWithGrouped.ToList()是具有相同键的所有变量的集合(在这里,它具有相同的Clave)。
对于您的代码,请尝试以下操作:

var final = finalv.Union(finalc);
var finalWithGrouped = final.GroupBy(x => x.Clave);
    
foreach (var articulosWithSameClavePair in finalWithGrouped)
{
    var clave = articulosWithSameClavePair.Key;
    var articulos = articulosWithSameClavePair.ToList();
        
    foreach(var articulo in articulos)
    {
        Articulo articulo2 = new Articulo();
        articulo2.ArtID = articulo.ArtID;
        articulo2.Clave = articulo.Clave;
        articulo2.ClaveAlterna = articulo.ClaveAlterna;
        lista.Add(articulo2);
    }
}

我建议您阅读一些使用GroupByexamples

70gysomp

70gysomp2#

当你对一个列表进行分组时,它将返回一个键和分组列表,而你正在尝试访问一个列表的单个属性。
当你分组一个数据,你可以把它转换成字典,这不是必要的,但更好的方式对我来说.你可以试试这个代码:

var final = finalv.Union(finalc);
    final = final.GroupBy(x => x.Clave).ToDictionary(s=> s.Key, s=> s.ToList();
    
    foreach (var articulo in final)
    {
        foreach (var articuloItem in articulo.value)
       {
        Articulo articulo2 = new Articulo();
        articulo2.ArtID = articuloItem.ArtID;
        articulo2.Clave = articuloItem.Clave;
        articulo2.ClaveAlterna = articuloItem.ClaveAlterna;
        lista.Add(articulo2);
       }
    }

相关问题