GROUP BY to List<> with Linq



我是使用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);
}

首先,这种用法在语法上与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);
}
}

我建议您阅读一些使用GroupBy的示例。

当您对列表进行分组时,它将返回一个键和Groed列表,并且您正在尝试访问列表的单个属性。

当你把一个数据分组时,你可以把它转换成字典,这对我来说不是必要的,但更好的方法。你可以试试这个代码:

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);
}
}

最新更新