O Linq de Language Integrated Query, é uma sintaxe de consulta onde podemos fazer essas consultas em objetos, datasets, SQL, Entities e XML.
Nesse artigo veremos 10 dicas para trabalharmos como o LINQ. Todo conteúdo abaixo esta comentado para um melhor entendimento.
//Dica 1
//Consultando a letra de cada palavra
static void LinqObjects()
{
//declarando uma lista de letras
List<char> letras;
//jogando cada letra na lista de letras
letras = "Este método fará um loop para cada letra".ToList();
//Usando linq para consultar as letras
var l = from letra in letras select letra;
foreach (var item in l)
{
Console.WriteLine(item);
}
}
//Dica 2
//Utilizando linq como where
static void LinqObjectsWhere()
{
//Declarando uma lista de string
List<String> palavras;
//Separando cada palavra da frase e jogando na lista
palavras = "Esse método vai filtrar as palavras que contem o tamanho menor e igual a 4".Split(' ').ToList();
//Fazendo um filtro com as palavras que possui até 4 letras
var p = from palavra in palavras
where palavra.Length <= 4
select palavra;
foreach (var item in p)
{
Console.WriteLine("A palavra {0} tem {1} letras", item, item.Length);
}
}
//Dica 3
//Utilizando linq com orderby
static void LinqObjectsOrdem()
{
//Declarando uma lista de string
List<String> palavras;
//Separando cada palavra da frase e jogando na lista
palavras = "Esse método vai ordenar as palavras pelo seu tamanho".Split(' ').ToList();
//Ordenando as palavras pelo seu tamanho
var p = from palavra in palavras
orderby palavra.Length
select palavra;
foreach (var item in p)
{
Console.WriteLine("Palavra: {0}",item);
}
}
//Dica 4
//Utilizando Linq com groupby
static void LinqObjectGroup()
{
//Declarando uma lista de string
List<String> palavras;
//Separando cada palavra da frase e jogando na lista
palavras = "Esse método vai agrupar as palavras que possui a mesma quantidade de letras".Split(' ').ToList();
//Agrupando as palavras pelo seu tamanho
var p = from palavra in palavras
group palavra by palavra.Length;
//lista a quantidade de palavras que possui o mesmo numero de letras
foreach (var item in p)
{ Console.WriteLine("--------------------------------------------------------------------");
Console.WriteLine("Existem {0} palavras com {1} letras", item.Count(), item.Key);
//lista as palavras desses tamanhos
foreach (var i in item)
{
Console.WriteLine(i);
}
}
}
//Dica 5
//Utilizando Linq com XML
static void LinqXML()
{
//Declarando uma lista de usuários
List<Usuario> Usuarios = new List<Usuario>();
//Inserindo o primeiro usuário
Usuarios.Add(new Usuario() {
ID=1,
Documento="11111",
Nome="Maria"
});
//Inserindo o segundo usuário
Usuarios.Add(new Usuario() {
ID=2,
Documento="22222",
Nome="João"
});
//Inserindo o terceiro usuário
Usuarios.Add(new Usuario() {
ID=3,
Documento="333333",
Nome="José"
});
//Montando o xml com linq
System.Xml.Linq.XElement xml = new System.Xml.Linq.XElement("Usuarios",
from usuario in Usuarios
select new System.Xml.Linq.XElement("Usuario",
new System.Xml.Linq.XAttribute("ID", usuario.ID),
new System.Xml.Linq.XElement("Nome", usuario.Nome),
new System.Xml.Linq.XElement("Documento", usuario.Documento)));
Console.WriteLine(xml);
}
//Dica 6
//Utilizando função lambda
static void FuncaoLambda()
{
//Os dois primeiros parametros int's, são os tipos que vão receber como parametros
//Sempre o ultimo parametro é o seu retorno
//criando a função somar
Func<int, int, int> Somar = (x, y) => x + y;
Console.WriteLine("Somando : ",Somar(1, 2));
}
//Dica 7
//chamando o metodo de extensão de uma string
static void ChamarExtension()
{
"email@email.com".ValidarEmail();
}
//para o método ser uma extensão precisa ser static e seguida da palavra this dentro do argumento
public static void ValidarEmail(this string Email)
{
Console.WriteLine("Validando e-mail{0}", Email);
}
//Dica 8
//metodos anonimos
public static void MetodosAnonimos()
{
//Criando os metodos sem uma classe definida
var usuario1 = new { Nome = "Fernando", Documento = "1234" };
var usuario2 = new { Nome = "Maria", Documento = "099888" };
Console.WriteLine("Nome: {0} Documento {1}", usuario1.Nome, usuario1.Documento);
Console.WriteLine("Nome: {0} Documento {1}", usuario2.Nome, usuario2.Documento);
}
//Dica 9
//Consultando com Generic
static void SelectInit()
{
//Criando uma lista de usuários
List<Usuario> Usuarios = new List<Usuario>();
//Inserindo o primeiro usuário
Usuarios.Add(new Usuario() {
ID=1,
Nome="Fernando",
Documento="11111"
});
//Inserindo o segundo usuário
Usuarios.Add(new Usuario()
{
ID = 1,
Nome = "Maria",
Documento = "22222"
});
//Inserindo o terceiro usuário
Usuarios.Add(new Usuario()
{
ID = 1,
Nome = "Marcia",
Documento = "2222"
});
//Consultando conteudo pelo inicio da palavra
var Usuario =Usuarios
.Where (u => u.Nome.StartsWith("M"))
.Select(u=>u);
//ou
var Usuario2 = from User in Usuarios
where User.Nome.StartsWith("M")
select User;
foreach (var item in Usuario)
{
Console.WriteLine("Usuário {0} Documento {1}", item.Nome, item.Documento);
}
foreach (var item in Usuario2)
{
Console.WriteLine("Usuário {0} Documento {1}", item.Nome, item.Documento);
}
//consultando conteudo pelo meio da palavra
var Usuario3 = Usuarios
.Where(u => u.Nome.Contains("n"))
.Select(u => u);
//ou
var Usuario4 = from User in Usuarios
where User.Nome.Contains("n")
select User;
foreach (var item in Usuario3)
{
Console.WriteLine("Usuário {0} Documento {1}", item.Nome, item.Documento);
}
foreach (var item in Usuario4)
{
Console.WriteLine("Usuário {0} Documento {1}", item.Nome, item.Documento);
}
//consultando conteudo pelo final da palavra
var Usuario5 = Usuarios
.Where(u => u.Nome.EndsWith("o"))
.Select(u => u);
//ou
var Usuario6 = from User in Usuarios
where User.Nome.EndsWith("o")
select User;
foreach (var item in Usuario5)
{
Console.WriteLine("Usuário {0} Documento {1}", item.Nome, item.Documento);
}
foreach (var item in Usuario6)
{
Console.WriteLine("Usuário {0} Documento {1}", item.Nome, item.Documento);
}
}
//Dica 10
//Utilizando dicionário com linq
static void DicionarioLinq()
{
//criando o dicionario
Dictionary<int, string> nomes = new Dictionary<int, string>();
//inserindo os conteudos
nomes.Add(1, "Maria");
nomes.Add(2, "João");
nomes.Add(3, "José");
nomes.Add(4, "Fernando");
//filtrando contendo onde as chaves são pares
var nome = from n in nomes
where (n.Key % 2) == 0
select n;
foreach (var item in nome)
{
Console.WriteLine("Nomes que contem a chave par são {0}", item);
}
}