A linguagem Linq também permite trabalhar com coleção de objetos. Na cláusula
where podemos realizar filtros sobre os atributos de objetos de forma semelhante
ao que foi feito com os elementos de um array.
Sintaxe
from objeto in colecao
where <condicao>
select objeto;
No exemplo 2 abaixo, a query Linq apresentada irá realizar um filtro em que todos elementos
de um array de objetos retornando aqueles que possuam código 3 ou nome que iniciado por "Fu".
Exemplo 2
using System;
using System.Linq;
using System.Collections.Generic;
public class Objeto
{
public int codigo;
public string nome;
}
public class Program
{
public static void Main()
{
Objeto[] array = {
new Objeto(){ codigo = 1, nome = "Fulano"},
new Objeto(){ codigo = 2, nome = "Ciclano"},
new Objeto(){ codigo = 3, nome = "Beltrano"},
};
IEnumerable<Objeto> retorno = from elemento in array
where elemento.codigo == 3 || elemento.nome.StartsWith("Fu")
select elemento;
foreach( var e in retorno)
Console.Write("codigo:{0} nome:{1}",e.codigo,e.nome);
}
}
Saída
codigo:1 nome:Fulano
codigo:3 nome:Beltrano
Nos exemplos anteriores, retornamos objetos de um mesmo tipo de dado que esta contido em uma
coleção. Porém, podemos utilizar a cláusula select para retornar objetos de outros
tipos utilizando o comando new.
Sintaxe
select new nome_classe() { atributo1 = valor1, atributoN = valorN };
No exemplo 3 abaixo, a query Linq apresentada irá realizar um filtro em todos
elementos de um array de objetos retornando uma nova coleção de objetos da classe Objeto2
contendo os códigos dos elementos do array.
Exemplo 3
using System;
using System.Linq;
using System.Collections.Generic;
public class Objeto
{
public int codigo;
public string nome;
}
public class Objeto2
{
public int id;
}
public class Program
{
public static void Main()
{
Objeto[] array = {
new Objeto(){ codigo = 1, nome = "Fulano"},
new Objeto(){ codigo = 2, nome = "Ciclano"},
new Objeto(){ codigo = 3, nome = "Beltrano"},
};
var retorno = from elemento in array
select new Objeto2 { id = elemento.codigo};
foreach( Objeto2 obj2 in retorno)
{
Console.WriteLine(obj2.id);
}
}
}
Saída
1
2
3