With a simple structure and using LINQ (System.Linq) you can solve this problem as follows:
Create a structure to store your groups
public class NaturezaOperacao
{
public int NatOper { get; set; }
public List<Produto> Produtos { get; set; }
public NaturezaOperacao()
{
//Inicialiando a lista para evitar problemas de null reference;
Produtos = new List<Produto>();
}
}
And let's call your input object as Product and represent it as follows.
public class Produto
{
public int Prod { get; set; }
public int NatOper { get; set; }
}
Now comes the Linq
and a foreach()
for you to group the products by NatOper
//Sua lista de entrada
var produtosInput = new List<Produto>
{
new Produto { Prod = 2345, NatOper = 5402 },
new Produto { Prod = 2343, NatOper = 5402 },
new Produto { Prod = 46123, NatOper = 5404 }
};
var gruposNaturezaOperacao = new List<NaturezaOperacao>();
//Selecionando as NatOper distintas que que existem na entrada
foreach (var natureza in produtosInput.Select(n => n.NatOper).Distinct())
{
gruposNaturezaOperacao.Add(new NaturezaOperacao
{
NatOper = natureza,
Produtos = produtosInput.Where(p => p.NatOper == natureza).ToList()
});
}
The final result for gruposNaturezaOperacao
, represented in JSON for easy visualization, will be:
[
{
"NatOper":5402,
"Produtos":[
{
"Prod":2345,
"NatOper":5402
},
{
"Prod":2343,
"NatOper":5402
}
]
},
{
"NatOper":5404,
"Produtos":[
{
"Prod":46123,
"NatOper":5404
}
]
}
]