Lista sem foreach ou for

29/08/2012

Como eu faria para pegar itens de uma lista de objetos, sem usar foreach ou for, com Dictionary, por exemplo(chave,valor), mas eu nunca usei isso. Como eu faço?

Pjava

Respostas

29/08/2012

Edson Oliveira

Dictionary<string, int> numbers = new Dictionary<string, int>();

numbers.Add("one", 1);
numbers.Add("two", 2);
numbers.Add("three", 3);

Console.WriteLine(numbers["one"]);
Console.WriteLine(numbers["two"]);
Console.WriteLine(numbers["three"]);
Responder Citar

29/08/2012

Pjava

Até então eu entendi, mas imagine uma lista preenchida com dados que vem do banco de dados. Eu não sei quem é quem, por isso fazemos um foreach para pegar em cada iteração valores que queremos. Mas e se eu quero pegar um dado específico, preciso iterar para ter esse dado? Vamos dizer que minha lista de objetos, eu tenho os campos e valores provenientes de uma tabela, sendo que os campos são representados por propiedades de meu objeto. Quero pegar, por exemplo, um IDTarefa de valor 2, ou a propriedade Descricao de valor "Testando". tem como eu pegar isso sem um foreach ou for? Pegar direto, sem rodeios.
Responder Citar

29/08/2012

Joel Rodrigues

Cada lista vai representar um único objeto?

Se não, experimente usar uma consulta LINQ onde você pode usar a cláusula Where.
Responder Citar

29/08/2012

Pjava

Isso, pode ser por Lambda ou por Delegate. Estou exatamente lendo a respeito e ver como eu implemento isso. Essa é minha rotina.
Lista<Entity.Tarefa> listaTarefa = new Lista<Entity.Tarefa>();
listaTarefa = Repository.Tarefa.RetornarTodos();

listaTarefa.FindAll();Está dando erro no FindAll e se coloca assim:

(c => c.Descricao) também dá erro de tipo string para bool. Mas estou lendo para fazer isso
Responder Citar

29/08/2012

Pjava

Meu where dentro do Linq não está funcionando

List<Entity.ExportacaoAgendamento> listaAgendamento = new List<Entity.ExportacaoAgendamento>();

listaAgendamento = Repository.ExportacaoAgendamento.RetornarTodos();
var dt = listaAgendamento.Where( c => c.DataExecucaoInicial >= DateTime.Now && c.DataExecucaoInicial <= DateTime.Now.AddMinutes(1));
foreach (var item in dt)
{
string caminho = item.Descricao;
}

Na forma como está escrito acima, não deveria vir nada, deveria ser uma liosta vazia e não está, está vindo com dois registros(tenho apenas dois nessa tabela) e o campo DataExecucaoInicial para esses registros são esses:
2012-09-02 17:31:59.387
2012-09-02 17:31:59.390
Qua não corresponde ao filtro passado nenhum dos dois.
Responder Citar

29/08/2012

Pjava

Consegui, com FindAll e não where, porem uma pergunta. Eu fiz uma cláusula Select, mas só consigo trazer um campo por vez, e gostaria de saber como eu faço para trazer mais campos no mesmo select do Linq. Meu código abaixo.

var dt = listaAgendamento.FindAll( c => c.DataExecucaoInicial >= DateTime.Now && c.DataExecucaoInicial <= DateTime.Now.AddDays(5))
.Select(c => c.IdRotina);
Responder Citar

29/08/2012

Pjava

Resolvi assim e pode fechar esse tópico

var dt = listaAgendamento.FindAll( c => c.DataExecucaoInicial >= DateTime.Now && c.DataExecucaoInicial <= DateTime.Now.AddDays(5))
.Select(c => new {c.IdRotina, c.Descricao, c.RepetirVezesDia});==>> Usando operador new
Responder Citar

29/08/2012

Joel Rodrigues

Experimenta fazer assim, PJava:
.Select(c => new {c.Atributo_1, c.Atributo_2});


Isso retornará uma lista de objetos de um tipo anônimo.
Responder Citar

29/08/2012

Joel Rodrigues

Beleza, estou fechando. Você respondeu enquanto eu digitava.
Abraço.
Responder Citar