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 !!!