C#

Linq: Filtrar campo string com múltiplos valores

Tive uma dificuldade em aplicar filtros dinâmicos ao linq, então como a solução é mais simples que pensei, vou passar os meus conhecimentos aqui.

A dificuldade era aplicar filtros enviados pelo usuário do sistema, por exemplo, exibir apenas as categorias “Administração”, “Php” e “C#”.

Para realizar essa tarefa é necessário estender a classe string. Quando li pensei que fosse uma tarefa complicada, mas na verdade é muito simples. Uma novidade do framework 4.0 é a possibilidade de estender classes de tipos.

Para isso basta criar uma nova classe, e colocar o código abaixo:

public static class StringExtensions
 {
 public static bool ContainsAny(this string str, params string[] values)
 {
 if (!string.IsNullOrEmpty(str) || values.Length > 0)
 {
 foreach (string value in values)
 {
 if (str.Contains(value))
 return true;
 }
 }
return false;
 }
public static bool ContainsAnyUpper(this string str, params string[] values)
 {
 if (!string.IsNullOrEmpty(str) || values.Length > 0)
 {
 foreach (string value in values)
 {
 if (str.ToUpper().Contains(value.ToUpper()))
 return true;
 }
 }
return false;
 }
 }

Isso irá permitir que realizar o seguinte:

string s = "Administração,Php,C#";
if (s.ContainsAny(s.Split))

O ContainsAny verifica se existe algum valor das entradas diferenciando maiúsculas de minúsculas. E o ContainsAnyUpper transforma o texto em caixa alta e não diferencia  maiúsculas de minúsculas.

Voltando ao assunto principal, para aplicar esse filtro basta executar o seguinte código:

saicEntities _db = new saicEntities();
            var tabela = (from tab in _db.tabela select tab);
            tabela = tabela.Where(t => t.Titulo.ContainsAny("Administração,Php,C#"));

abração a todos

Anúncios
Padrão

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s