Renato Haddad

MVP, Developer .NET and MS-Office, MCPD, MCTS

Pesquisas Where com o LINQ com vários elementos

Existem situações nas aplicações onde é preciso usar vários critérios numa pesquisa, por exemplo, como saber quais clientes cadastrados das cidades a, b, c, etc? com o linq o uso do Where facilita muito. Baseado no banco de dados Northwind, veja um código onde carrego a listbox cidades somente com os nomes das cidades contidas na classe (tabela) Customers. O Distinct já filtra somente cidades únicas.

 lstCidades.DataSource = From c In db.Customers Select c.City Distinct

 Agora, veja o código para uma pesquisa comum com apenas uma cidade selecionada:

gridDados.DataSource = From c In db.Customers Order By c.City Where c.City.Equals(lstCidades.Text)

Muito bem. Agora é que vem o truque. se setar a propriedade SelectionMode para MultiSimple do listbox,irá permitir o usuário selecionar várias opções do listbox. E, como fica o código da pesquisa? Com o LINQ é preciso pensar um pouco diferente, pois primeiro é preciso definir uma lista com todas as cidades selecionadas - veja que usei o Generics List(Of String) com um looping For Each para varrer somente os ítens selecionados do lstCidades. A cada iteraçáo o respectivo item (neste caso o nome da cidade) é adicionada à variável cidade (que é a lista com Generics). Em seguida, observe como que defini o critério de forma contrária, pois o linq é assim, ou seja, normalmente vc pensa onde (where) a propriedade cidade (c.City) contiver (Contains) a lista de cidades. Mas, o correto é onde Where a lista cidades contiver a propriedade cidade (veja a última linha de código). 

Dim cidades As New List(Of String)

For Each Item In lstCidades.SelectedItems

cidades.Add(Item.ToString)

Next

gridDados.DataSource = From c In db.Customers Order By c.City Where cidades.Contains(c.City)

É isto, aqui está mais uma sensacional dica do LINQ. Caso queira aprender o linq com C#, leia o meu livro http://www.editoraerica.com.br/buscafinal.asp?cod=2366

Boa sorte e viva o LINQ !!!

Posted: Aug 07 2009, 07:05 PM by renatohaddad | with 1 comment(s)
Filed under:

Comments

Rodrigo said:

Oi, estou tendo dificuldade com esses filtros do linq, precisava fazer um filtro onde o valor, que encontrei pelo JOIN, é menor que um que estabeleci, como fazer?

Digo isso que estou tendo problema pq o valor é double, nao sei se influencia

# October 5, 2009 10:44 AM
Leave a Comment

(required) 

(required) 

(optional)

(required)