Lista sem foreach ou for

.NET

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

Pjava

Curtidas 0

Respostas

Edson Oliveira

Edson Oliveira

29/08/2012

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"]);
GOSTEI 0
Pjava

Pjava

29/08/2012

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

29/08/2012

Cada lista vai representar um único objeto?

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

Pjava

29/08/2012

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
GOSTEI 0
Pjava

Pjava

29/08/2012

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.
GOSTEI 0
Pjava

Pjava

29/08/2012

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);
GOSTEI 0
Pjava

Pjava

29/08/2012

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
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

29/08/2012

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


Isso retornará uma lista de objetos de um tipo anônimo.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

29/08/2012

Beleza, estou fechando. Você respondeu enquanto eu digitava.
Abraço.
GOSTEI 0
POSTAR