Contar a quantidade de um determinado item em uma coleção
26/03/2009
0
Tenho uma coleção de produtos e gostaria de contar quantos deles é de uma determinada marca para exibir num label ao lado da marca na página, as marcas e seus respectivos ids já estão inseridos en cada item da coleção.
Como posso fazer isso?
Muito obrigado e um abraço
Julion
Posts
27/03/2009
Ara.es
29/03/2009
Julion
Puxar passou batido para mim o linq to object, estou dando uma boa olhada nele agora e me parece ser uma ferramenta e tanto.
Quanto a minha coleção acho que fiz uma lambança danada aqui, mas acabou dando “certo”.
Como a contagem era por produto, toda a vez que um produto do mesmo fabricante era processado ele refazia a contagem e printava na pagina, então nos teste eu acabava ficando com vários fabricantes repetidos na pagina.
Então tentei filtrar antes da entrada, e meu código ficou assim:
private ArrayList fabIdList = new ArrayList();
private ColecaoDeProduto proColl = new ColecaoDeProduto(); //Minha Coleção tipada
private int FabCount(int produtoFabricanteId)
{
bool forResult = true;
foreach (var fab in fabIdList)
{
if ((int)fab == produtoFabricanteId)
{
forResult = false;
}
}
if (forResult)
{
int fabCount = proColl.Count(m => m.FabricanteId == produtoFabricanteId);
result = fabCount;
}
else
{
result = -1;
}
fabIdList.Add(produtoFabricanteId);
return result;
}
void rptrNarrowByFabricante_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int fabCount = 0;
Produto produto = e.Item.DataItem as Produto;
if (produto == null) return;
fabCount = FabCount(produto.FabricanteId);
if (result == -1) return;
HyperLink hyFabCount = e.Item.FindControl(´hlNarrowByFabricante´) as HyperLink;
if (hyFabCount != null)
{
hyFabCount.Visible = true;
hyFabCount.Text = string.Format(´ ({1:N0})´, produto.Fabricante.Nome,
fabCount);
}
}
}
Você acha que devo criar uma nova colleção tipada, processar e daí adicionar o resultado a essa nova coleção e depois fazer um bind dela ao repeater?
Valeu
Um abraço
02/04/2009
Julion
Um Simples COUNT acredito ser a forma mais apropriada.
Abraço a todos
:D
Clique aqui para fazer login e interagir na Comunidade :)