Usuário com melhor resposta
Lidando com listas ou dicionários

Pergunta
-
Pessoal, boa noite. Estou com uma dúvida.
Tenho produtos e quantidades, ex.:
Produto 1 - 20
Produto 2 - 15
Produto 3 - 10
Produto 1 - 15Ele me retorna do banco como "idProduto" e "quantidade", ex.:
Linha 1 idProduto = 1, quantidade 20
Linha 2 idPorudot = 2, quantidade 15Eu preciso juntar tudo por idProduto... por exemplo o idProduto 1 tem que ser 35. E aí estou com um problema pois não sei como fazer isso, tentei adicionar um dicionário com o idProduto como "KEY" e a quantidade como "value".. Mas depois não consigo atualziar, ex:
List<Pedido> TodosPedidos = Pedidos.BuscaTodas(dia); MultiDimDictList myDicList = new MultiDimDictList(); for (int i = 0; i < TodosPedidos.Count; i++) { foreach (var item in TodosPedidos[i].PedidoItems) { if (myDicList.Count == 0) { myDicList.Add(item.idProduto.ToString(), item.quantidade); } else { foreach (var key in myDicList) { if (key.Key == item.idProduto.ToString()) { } else { myDicList.Add(item.idProduto.ToString(), item.quantidade); } } } } }
public class MultiDimDictList: Dictionary<string, int>{
}
Tentei inserir no dicionário myDicList um item com o "key" o idProduto e o value a quantidade.
Mas quando rodo de novo, ele dizia que já existia um "key" 1 por exemploComo verificar se o key já existe, e se existir, alterar o value..
ou
Eu estou fazendo da melhor forma?Obrigado
Respostas
-
Cara... usando um poco de linq resolvi pra vc... ve ai... to meio com sono entao acho q da pra melhor... mas vai ai
public class produto
{
public int qtd { get; set; }
public string nome { get; set; }
}protected void Page_Load(object sender, EventArgs e)
{
IList<produto> produtos = new List<produto>();
IList<produto> saida = new List<produto>();
produtos.Add(new produto { nome = "produto1", qtd = 1 });
produtos.Add(new produto { nome = "produto2", qtd = 1 });
produtos.Add(new produto { nome = "produto1", qtd = 1 });
foreach (produto p in produtos)
{
if (saida.Where(i => i.nome == p.nome).Count() <= 0)
{
saida.Add(new produto{ nome = p.nome, qtd = produtos.Where(x => x.nome == p.nome).Sum(i => i.qtd)});
}
}
}Ve ai se consegui te ajudar...
Guns!
- Marcado como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
-
tente assim:
saida = saida.orderby( x => x.nome ).ToList();
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Twitter @Olavooneto
Se for útil marque como resposta e faça um Developer feliz :)- Sugerido como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
- Marcado como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
-
Tenta isso que o Olavo comentou queda certo sim =)
Esse x i não é padrao... é uma forma de acessar os atributos de uma lista de objetos com LINQ... pesquisa um pouco sobre linq ai que vale a pena em algumas situações
Guns!
- Marcado como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
Todas as Respostas
-
Cara... usando um poco de linq resolvi pra vc... ve ai... to meio com sono entao acho q da pra melhor... mas vai ai
public class produto
{
public int qtd { get; set; }
public string nome { get; set; }
}protected void Page_Load(object sender, EventArgs e)
{
IList<produto> produtos = new List<produto>();
IList<produto> saida = new List<produto>();
produtos.Add(new produto { nome = "produto1", qtd = 1 });
produtos.Add(new produto { nome = "produto2", qtd = 1 });
produtos.Add(new produto { nome = "produto1", qtd = 1 });
foreach (produto p in produtos)
{
if (saida.Where(i => i.nome == p.nome).Count() <= 0)
{
saida.Add(new produto{ nome = p.nome, qtd = produtos.Where(x => x.nome == p.nome).Sum(i => i.qtd)});
}
}
}Ve ai se consegui te ajudar...
Guns!
- Marcado como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
-
Cara, muito obrigado deu certo.
Agora não entendi muito bem. O que é esses "i" e "x" ???
Seguindo sua lógico eu tentei ordenar pelo ID também, e coloquei o final.
saida.orderby( x => x.nome );
Mas ele não ordenou...
Pq?No mais, obrigado por tudo, valeu.
-
tente assim:
saida = saida.orderby( x => x.nome ).ToList();
Olavo Oliveira Neto
http://olavooneto.wordpress.com
Twitter @Olavooneto
Se for útil marque como resposta e faça um Developer feliz :)- Sugerido como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
- Marcado como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
-
Tenta isso que o Olavo comentou queda certo sim =)
Esse x i não é padrao... é uma forma de acessar os atributos de uma lista de objetos com LINQ... pesquisa um pouco sobre linq ai que vale a pena em algumas situações
Guns!
- Marcado como Resposta Olavo Oliveira NetoModerator terça-feira, 27 de março de 2012 11:41
-