none
ling condicional RRS feed

  • 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

    sexta-feira, 17 de agosto de 2012 17:52

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

    sexta-feira, 17 de agosto de 2012 18:26
  • 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;"

    sexta-feira, 17 de agosto de 2012 18:46
  • 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

    sexta-feira, 17 de agosto de 2012 18:52
  • 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

    sexta-feira, 17 de agosto de 2012 19:21
  • 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;"

    sexta-feira, 17 de agosto de 2012 19:25
  • Olá Junior,

    Outra possibilidade é utilizar Dynamic LINQ, veja este link:

    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

    []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

    segunda-feira, 20 de agosto de 2012 13:25
    Moderador
  • 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



    segunda-feira, 20 de agosto de 2012 16:00
    Moderador