Inquiridor
ling condicional

Pergunta
-
Tenho uma página onde estou usando linq para acessar o banco, tenho dois dropdownlist que se o usuário sleecionar vou alterar meu linq ou seja vou ter que verificar um campo ou dois na consulta linq, antes como fazia o select normal na concatenação da string eu testava tipo assim
string sql = ""
sql = " select .......";
if (ddldepartamento.selecteditem.value != "0")
{
sql += "era assim";
}
else
{
sql += " era de outro jeito";
}
Agora com linq simplesmente faço assim
var result = (from tu in entidade.tabela where .....) como vou testar isso ?
Junior
- Movido Seilor Bonancio Junior segunda-feira, 20 de agosto de 2012 12:36 (De:ASP.NET)
Todas as Respostas
-
Junior, boa tarde
Não entendi muito a sua duvida,
você quer saber como vai testar?
R: Basta retornar uma lista de objetos para o dropdown e dar o databind
ou você quer saber como fazer?
R: Eu faria do mesmo jeito que você fiz antes
var result;
if (ddldepartamento.selecteditem.value != "0")
{
result = (from tu in entidade.tabela where .....)
}
else
{
result = (from tu in entidade.tabela where .....)
}
Bruno Viegas D. Ribeiro
-
Se result retornar uma coleção, use um método de count(), mas o ideal é jogar direto para o foreach();
Se você tiver certeza ou quiser sempre retornar um único resultado, coloque no final da coleção assim:
var result = (from tu in entidade.tabela where .....).SingleorDefault();
Rafael Santos
Observações:
1. Selecione a opção "Habilitar o Live Alerts por Padrão" nas suas configurações para que possa acompanhar em tempo real as atividades relacionadas a sua Thread;
2. Não abandone sua Thread. Ao perguntar, fique atento às respostas; ao encontrar uma solução, compartilhe;
3. As pessoas que dedicam seu tempo na busca por soluções para você não ganham nada em troca. Valorize-as e em forma de agradecimento pontue as respostas corretas.
"Quem disse que não escrevo poesias? A diferença é que as minhas começam com using System;" -
Bruno é assim em linq qdo faço uma pesquisa e dessa pesquisa me retorna um result de muitos registros tolist ou toarray declaramos uma var com a consulta, sendo que no meu caso se os dropdownlist forem selecionados a consulta será alterada, queria saber como resolvo isso sem ter que duplicar ou triplicar meu código. é assim :
sem selecionar nenhuma dropdonwlist
var result = (from tu in entidade.usuario where tu.codigo == cod select tu).tolist();
se o usuário selecionar um dropdonwlist ficará assim
string dep = dropdownlist.selecteditem.value;
string cust = dropdownslit2.selecteditem.value;
var result = (from tu in entidade.usuario where tu.codigo == cod && tu.dep = dep).tolist();
se o usuário tb selecionar o outro dropdonwlist ficará assim
string result = (from tu in entidade.usuario where tu.codigo == cod && tu.dep == dep && tu.ccust = cust).tolist();
gridview1.datasource = result;
gridview1.databind();
Junior
-
Junior,
Pode até ser que exista uma forma de se favor apenas uma vez a instração do linq, mas eu desconheço
Quando faço isso nos meus projetos, utilizo do da mesma forma, pois acredito que o linq não seria capaz de resolver essa questão.
Bruno Viegas D. Ribeiro
-
Aaaaaaaaaahhhh Junior, pow, usa Lambda cara! eu não tinha entendido quando comentei acima.
Aqui vc tem uma ideia: http://stackoverflow.com/questions/8663897/why-is-linq-wherepredicate-first-faster-than-firstpredicate
Usa o mpetodo Where() para filtrar.
Rafael Santos
Observações:
1. Selecione a opção "Habilitar o Live Alerts por Padrão" nas suas configurações para que possa acompanhar em tempo real as atividades relacionadas a sua Thread;
2. Não abandone sua Thread. Ao perguntar, fique atento às respostas; ao encontrar uma solução, compartilhe;
3. As pessoas que dedicam seu tempo na busca por soluções para você não ganham nada em troca. Valorize-as e em forma de agradecimento pontue as respostas corretas.
"Quem disse que não escrevo poesias? A diferença é que as minhas começam com using System;"- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator sábado, 25 de agosto de 2012 13:11
-
Olá Junior,
Outra possibilidade é utilizar Dynamic LINQ, veja este link:
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Ola Junior,
Então, ao inves de ficar usando o "ToList()" toda vez, vo pode criar uma query em cadeia usando o tipo IQueryable... e so no final usar o ToList para executar uma unica consulta.
var query = from tu in entidade.usuario where tu.codigo == cod select tu; if (dropdownlist.selecteditem.value != null) query = query.Where(tu => tu.dep == dropdownlist.selecteditem.value); if (dropdownlist2.selecteditem.value != null) query = query.Where(tu => tu.cust == dropdownlist2.selecteditem.value); gridview1.datasource = query.ToList();
Microsoft Community Contributor
- Editado Rui SantosModerator segunda-feira, 20 de agosto de 2012 16:03
- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator sábado, 25 de agosto de 2012 13:10