Usuário com melhor resposta
Atribuir valor a propriedade de um objeto por uma lista de objetos

Pergunta
-
Tenho uma lista de objetos: List. Bem, esse objeto tem três propriedades, digamos, cnpj, acao e novaacao. Fiz um linq ou lambda e me trouxe todos os resultados, digamos duas linhas. Faço um foreach no resultado da linq ou lambda e como agora eu atribuo a cada propriedade do meu objeto através da lista desse objeto? Assim:
List<pdv> lista = new List<pdv>(); var resultado = (from ...).ToList(); foreach(var r in resultado) { lista.Add(r.cnpj);//ISSO DÁ ERRO }
Respostas
-
Olá Daniel, não gera erro. Só repete o mesmo cnpj. Tipo, eu tenho dois cnpj distintos. A lista realmente está com dois registros ou duas linhas, mas sempre com o mesmo cnpj. Se colocar um break e debugar, vem o primeiro CNPJ, legal. Depois, vem o segundo e toda a lista fica com esse segundo CNPJ. Veja como está meus foreach
Nesse código, eu consigo ter dois registros, ou seja, a lista tem duas linhas, mas com o mesmo cnpj e eu tenho dois cnpj diferentes.
foreach (var r in resultadoAcao) { novo.acao = r.acao; novo.proximaAcao = r.proximaacao; } foreach (var r in resultadoPdv) { novo.cnpj = r.Cnpj; lista.Add(novo); }
pnet, isso acontece porque a cada iteração você deve sempre criar uma instancia da classe que deseja adicionar entende ! Vamos supor que seu "novo" seja uma classe chamada Novo veja como ficaria :
foreach (var r in resultadoPdv) { Novo novo = new Novo(); novo.cnpj = r.Cnpj; lista.Add(novo); }
Somente fazendo isso não vai mais repetir o cnpj ! Pois na sua lista não vai mais ser apontado para a mesma referencia do objeto !
- Marcado como Resposta pnet quarta-feira, 28 de maio de 2014 21:28
Todas as Respostas
-
Quando você está guardando o CNPJ, (provavelmente é uma string), você está tentando guardar na lista de pdv.
O correto é você fazer assim:
List<string> lista = new List<string>(); var resultado = (from ...).ToList(); foreach(var r in resultado) { lista.Add(r.cnpj); }
Agora, se você quer usar o objeto que você retornou no linq e quer passar para o tipo pdv, então você deve fazer assim:
List<pdv> lista = new List<pdv>(); var resultado = (from ...).ToList(); foreach(var r in resultado) { pdv obj = new pdv(); obj.cnpj = r.cnpj; obj.acao = r.acao; ... lista.Add(obj); }
Isso fica meio estranho porque normalmente o primeiro objeto que fazemos já é o modelo utilizado. Mas se o primeiro objeto é somente um objeto de transporte, use dessa forma.
Veja se funciona e poste seus resultados.
Abraços !
Diego Murakami
- MCP, MS
* Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.- Editado Diego Murakami quarta-feira, 28 de maio de 2014 14:23 adicionei mais códigos
-
-
-
Olá Daniel, não gera erro. Só repete o mesmo cnpj. Tipo, eu tenho dois cnpj distintos. A lista realmente está com dois registros ou duas linhas, mas sempre com o mesmo cnpj. Se colocar um break e debugar, vem o primeiro CNPJ, legal. Depois, vem o segundo e toda a lista fica com esse segundo CNPJ. Veja como está meus foreach
Nesse código, eu consigo ter dois registros, ou seja, a lista tem duas linhas, mas com o mesmo cnpj e eu tenho dois cnpj diferentes.
foreach (var r in resultadoAcao) { novo.acao = r.acao; novo.proximaAcao = r.proximaacao; } foreach (var r in resultadoPdv) { novo.cnpj = r.Cnpj; lista.Add(novo); }
-
Veja como fica o xml de retorno do web service
<ArrayOfPdvNovo xmlns="http://schemas.datacontract.org/2004/07/V99SuporteTecnicoContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><PdvNovo><acao>Visita Técnica</acao><cnpj>03146478000112</cnpj><proximaAcao>Agendamento de Visita Técnica Parceiro</proximaAcao></PdvNovo><PdvNovo><acao>Visita Técnica</acao><cnpj>03146478000112</cnpj><proximaAcao>Agendamento de Visita Técnica Parceiro</proximaAcao></PdvNovo></ArrayOfPdvNovo> -
pnet,
A sua idéia é guardar objetos de pdv sem repetir CNPJ ?
Se não, fale qual é o problema que você precisa resolver que a gente ajuda.
Abraços !
Diego Murakami
- MCP, MS
* Por favor "Marcar como Resposta" caso esta for útil para sua dúvida. -
Olá Daniel, não gera erro. Só repete o mesmo cnpj. Tipo, eu tenho dois cnpj distintos. A lista realmente está com dois registros ou duas linhas, mas sempre com o mesmo cnpj. Se colocar um break e debugar, vem o primeiro CNPJ, legal. Depois, vem o segundo e toda a lista fica com esse segundo CNPJ. Veja como está meus foreach
Nesse código, eu consigo ter dois registros, ou seja, a lista tem duas linhas, mas com o mesmo cnpj e eu tenho dois cnpj diferentes.
foreach (var r in resultadoAcao) { novo.acao = r.acao; novo.proximaAcao = r.proximaacao; } foreach (var r in resultadoPdv) { novo.cnpj = r.Cnpj; lista.Add(novo); }
pnet, isso acontece porque a cada iteração você deve sempre criar uma instancia da classe que deseja adicionar entende ! Vamos supor que seu "novo" seja uma classe chamada Novo veja como ficaria :
foreach (var r in resultadoPdv) { Novo novo = new Novo(); novo.cnpj = r.Cnpj; lista.Add(novo); }
Somente fazendo isso não vai mais repetir o cnpj ! Pois na sua lista não vai mais ser apontado para a mesma referencia do objeto !
- Marcado como Resposta pnet quarta-feira, 28 de maio de 2014 21:28