Lista sem foreach ou for
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
Curtidas 0
Respostas
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
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
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.
Se não, experimente usar uma consulta LINQ onde você pode usar a cláusula Where.
GOSTEI 0
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
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
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.
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
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);
var dt = listaAgendamento.FindAll( c => c.DataExecucaoInicial >= DateTime.Now && c.DataExecucaoInicial <= DateTime.Now.AddDays(5))
.Select(c => c.IdRotina);
GOSTEI 0
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
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
29/08/2012
Experimenta fazer assim, PJava:
Isso retornará uma lista de objetos de um tipo anônimo.
.Select(c => new {c.Atributo_1, c.Atributo_2});
Isso retornará uma lista de objetos de um tipo anônimo.
GOSTEI 0
Joel Rodrigues
29/08/2012
Beleza, estou fechando. Você respondeu enquanto eu digitava.
Abraço.
Abraço.
GOSTEI 0