Inquiridor
filtro linq

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;
}
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. -
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 -
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. -
-
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