none
filtro linq RRS feed

  • Pergunta

  • estou com problemas para realizar um filtro com linq em uma pagina aspx

    tenho um textbox e um Button, nesse textbox quando eu coloco somente o primeiro nome do cliente a pesquisa realiza ok, e quando somente o sobrenome e colocado a pesquisa continua ok...

    mais quando coloco o nome completo não retorna nenhum valor no grid...

    tenho certeza que o erro esta no código linq, como faço para corrigir?

    public IEnumerable<Cliente> listarClientes(string nomePesq)

            {

                var listar = from c in dc.Clientes

                             where c.ClienteNome.Contains(nomePesq)

                                   || c.ClienteSobrenome.Contains(nomePesq)

                             select c;

     

                return listar;

            }



    quinta-feira, 7 de janeiro de 2010 13:54

Todas as Respostas

  • No seu método, você está passando "nome + sobrenome" correto?

    Só que na busca, quando busca pelo nome ele está recebendo o sobrenome junto, assim como na busca por sobrenome, você está passando o nome junto, ou seja, está ficando assim:

    nome == nome + sobrenome
    sobrenome == nome + sobrenome

    Por isso o resultado está chegando vazio quando você busca pelos dois.
    sexta-feira, 8 de janeiro de 2010 10:22
  • Tente usar "StartsWith"...



    ex:
    public IEnumerable<Cliente> listarClientes(string nomePesq)
    
            {
    
                var listar = from c in dc.Clientes
    
                             where c.ClienteNome.StartsWith(nomePesq)
    
                                   || c.ClienteSobrenome.StartsWith(nomePesq)
    
                             select c;
    
     
    
                return listar;
    
            }
    
    Abraços
    sexta-feira, 8 de janeiro de 2010 10:22
  • só tem um textbox e um button na pagina aspx:

    <

     

    asp:TextBox ID="txtPesqCliente" runat="server" CssClass="txtCliente"></asp:TextBox>

    <

     

    asp:Button ID="btnPesquisar" runat="server" Text="Buscar" OnClick="btnPesquisar_Click" />

    quando coloco somente o nome acha o resultado e
    quando coloco somente o sobrenome tambem o resultado aparece

    mais colocando os dois não acha nada... lembrando que no banco de dados é um coluna para nome e outra para o sobrenome...

    ja tentei o Contains e o StartsWith.

    sexta-feira, 8 de janeiro de 2010 11:51
  • Tente assim:

    public
    IEnumerable<Cliente> listarClientes(string nomePesq)

            {

                var listar = from c in dc.Clientes

                             where (c.ClienteNome + c.ClienteSobrenome).Contains(nomePesq)

                             select c;

     

                return listar;

            }

    abraço!

    segunda-feira, 11 de janeiro de 2010 14:14
  • andrey,

    A resposta do Anderson está correta quanto ao retorno vazio. O marciliosi sugeriu algo interessante, mas vou mudar um pouco concatenando um espaço entre o nome e o sobrenome:

    var listar = from c in dc.Clientes
                where (c.ClienteNome + " " + c.ClienteSobrenome).Contains(nomePesq)
                select c;

    ou, se a pesquisa é case insensitive...

    var listar = from c in dc.Clientes
                where (c.ClienteNome + " " + c.ClienteSobrenome).ToLower().Contains(nomePesq.ToLower())
                select c;

    Att.

    Ari C. Raimundo
    MCAD, MCP
    http://araimundo.blogspot.com
    terça-feira, 12 de janeiro de 2010 01:33