Análise e Projeto Orientado a Objetos 
Grupo 4 
Mapeamento Objeto-Relacional com LINQ
LINQ
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
O que é LINQ? 
LINQ - Language integrated Query - é um conjunto de recursos introduzidos no .NET 
Framework 3.5 que permitem a realização de consultas diretamente em base de dados , 
documentos XML , estrutura de dados , coleção de objetos ,etc. usando uma sintaxe parecida 
com a linguagem SQL. 
Atenção você precisa do Visual Studio 2008 ou o Visual Web Developer 2008 Express (.NET 
Framework 3.5) instalado
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Arquitetura LINQ 
OBS: LINQ to SQL é uma solução OR/M (Acesso a Dados) e os outros tipos de LINQ 
(Objects, Datasets, Entities, XML) são linguagens de consulta
LINQ to Object
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to Object 
Consiste na execução de “queries” semelhantes às escritas em SQL (Structured Query 
Language) sobre coleções que implementam uma das interfaces IEnumerable ou 
IEnumerable<T>. 
Objetivo é realizar consultas sobre coleções que implementam as interfaces 
IEnumerable ou IEnumerable<T>, ou seja, Arrays, Listas genéricas do tipo List<T>, 
dicionários de dados, textos, etc.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Examples
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Examples
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Operadores 
Select - Faz uma projeção na coleção de dados para selecionar regiões relevantes entre os elementos. 
Where - Define regras de filtragem na coleção de dados que são avaliadas para cada item. 
SelectMany - Mapeamento estipulado pelo programador de uma coleção de dados para coleções. 
Sum, Min, Max, Average - Encontra a soma, o menor elemento, o maior elemento ou a média dos itens da coleção 
de dados, respectivamente. 
Join, GroupJoin - Faz a junção de duas coleções de dados, baseado em chaves de comum valor semântico em cada 
coleção. 
Take, TakeWhile - O primeiro seleciona os primeiros n ojectos da coleção, enquanto o segundo toma um predicado 
que seleciona os objectos que casam com o predicado. 
Skip, SkipWhile - Complementos dos anteriores, eles ignoram os primeiros n objetos da coleção, ou enquanto há 
casamento com o predicado. 
OfType - Seleciona objetos de determinado tipo.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Operadores 
Concat - Concatena duas coleções. 
OrderBy, ThenBy - O primeiro determina o critério de ordenação da coleção de dados, ascendente por padrão. O 
segundo especifica critérios subsequentes de ordenação. 
Reverse - Inverte a ordenação da coleção de dados. 
GroupBy - Extrai uma chave e retorna uma coleção para cada chave. 
Distinct - Remove instâncias repetidas na coleção. 
Union, Intersect, Except - Provem união, interseção e complementar em duas sequências, respectivamente. 
SequenceEqual - Verifica se todos os elementos de duas coleções são iguais. 
First, FirstOrDefault, Last, LastOrDefault - Retorna o primeiro elemento, o primeiro ou o valor padrão, o último, o 
último ou valor padrão da coleção de dados, respectivamente. 
Single - Retorna o único elemento que casa um predicado dado. Havendo nenhum ou múltiplos casamentos, uma 
exceção é lançada. 
ElementAt - Retorna o elemento em determinado índice na coleção de dados.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Operadores 
Any, All, Contains 
O primeiro verifica se algum elemento da coleção casa o predicado. O segundo verifica se todos os elementos da 
coleção casam o predicado. O terceiro verifica se a coleção contém determinado valor. 
Count 
Conta a quantidade de elementos em uma coleção. 
Ainda são especificados alguns operadores de conversão da coleção em outro tipo: 
• AsEnumerable: converte para IEnumerable<T>. 
• ToQueryable: converte para IQueryable<T>. 
• ToArray: converte para vetor. 
• ToList: converte para IList<T>. 
• ToDictionary: converte para IDictionary<K, T>, indexado por K. 
• ToLookup: converte para ILookup<K, T>, indexado por K. 
• Cast: converte uma coleção IEnumerable não-genérica para uma IEnumerable<T>, por conversão de tipo. 
• OfType: converte uma coleção IEnumerable não-genérica para uma IEnumerable<T>, incluindo somente 
elementos do tipo T.
LINQ to XML
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to XML 
Visto que eliminar tamanha complexidade é um dos objetivos principais do LINQ to 
XML. 
Embora a plataforma .NET lhe oferece recursos para tratar com XML , o LINQ to XML 
vai além, pois ele integra os operadores padrão de consulta do LINQ com XML, e, além 
disso, o oferece também classes para criar e gerenciar facilmente XML. 
Dessa forma o LINQ to XML permite que você fique focado no que você tem que fazer 
e não em como fazer tornando assim o XML apenas uma fonte de dados para o LINQ.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
Examples 
<?xml version="1.0" encoding="utf-8" ?> 
<empregado> 
<!--secção pessoa--> 
<pessoa> 
<id>1</id> 
<nome>Jose Carlos</nome> 
<sobrenome>Macoratti</sobrenome> 
<idperfil>1</idperfil> 
</pessoa> 
<pessoa> 
<id>2</id> 
<nome>Jefferson</nome> 
<sobrenome>Andre</sobrenome> 
<idperfil>2</idperfil> 
</pessoa> 
<!--pseção perfil-> 
<perfil> 
<id>1</id> 
<perfildescricao>Gerente</perfildescricao> 
</perfil> 
<perfil> 
<id>2</id> 
<perfildescricao>Analista</perfildescricao> 
</perfil> 
<!--seção salario-> 
<salario> 
<idpessoa id="1" ano="2006" salarioano="10000,00" 
/> 
<idpessoa id="1"ano="2007" salarioano="15000,00" 
/> 
</salario> 
</empregado> 
XElement xml = XElement.Load(@"....Empregado.xml"); 
var consulta = from p in 
xml.Elements("empregado").Elements("pessoa") 
where (int)p.Element("id") == 1 
select p;foreach(var registro in consulta) 
{ 
Console.WriteLine("Pessoa: {0} {1}", 
registro.Element("nome"), 
registro.Element("sobrenome")); 
}
LINQ to DataSet
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
DataSet o que é? 
O primeiro dos dois maiores componentes da arquitetura ADO.NET, veio pra substituir o antigo Recordset 
da ADO. Para a camada de apresentação, o DataSet está integrado com controles de GUI para a vinculação 
de dados. Para a camada intermediária, ele fornece um cache que preserva o formato relacional de dados, e 
inclui serviços simples rápidos de consulta e navegação a hierarquia. 
Principal característica : - Totalmente desconectado. 
Quando usar ? 
-Armazenar dados por um longo período. 
-Transferir dados para outras classes. 
-Fazer atualizações e alterações nos dados sem usar procedimentos armazenados nem declarações SQL. 
-Salvar e recuperar dados como um arquivo XML. 
-Poder ler dados e navegar pelos dados sem restrições para frente e para trás entre as tabelas do banco de 
dados.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to DataSet 
É um componente do. NET Framework versão 3.5, que simplifica as consultas permitindo aos 
desenvolvedores criar consultas com a própria linguagem de programação, em vez de usar uma 
linguagem de consulta separada e fornece a verificação em tempo de compilação. 
Positivo Negativo 
Otimiza a performance do banco reduzindo o 
número de acessos. 
Recursos de consulta limitados. 
Manipular os dados em memória mantendo 
sua forma relacional. 
Soluções para oracle não são padrão. 
Permite consultar dados consolidados de 
uma ou mais fontes.
LINQ to SQL
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
é um componente do. NET Framework versão 3.5, que fornece uma infra-estrutura em tempo 
de execução para a gestão dados relacionais como objetos. 
Suporte a transações 
Functions 
Stored Procedures 
Views 
ORM a grosso modo é uma técnica que reúne um conjunto de classes que mapeiam as entidades de um 
bando de dados relacional.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
é um componente do. NET Framework versão 3.5, que fornece uma infra-estrutura em tempo 
de execução para a gestão dados relacionais como objetos. 
Suporte a transações 
Functions 
Stored Procedures 
Views 
Aplicação 
LINQ to SQL 
ADO.NET SQL Server 
ORM a grosso modo é uma técnica que reúne um conjunto de classes que mapeiam as entidades de um 
bando de dados relacional.
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
Classes geradas pelo LINQ to SQL 
public partial class NorthwindDataContext : System.Data.Linq.DataContext 
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged 
public partial class Category : INotifyPropertyChanging, INotifyPropertyChanged
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
Select 
using( NorthwindDataContext db = new NorthwindDataContext()) 
{ 
IEnumerable<Product> beverages = from p in db.Products 
where p.Category.CategoryName == "Beverages" 
orderby p.ProductName 
select p; 
}
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
Update 
using( NorthwindDataContext db = new NorthwindDataContext()) 
{ 
Product p = db.Products.First(); 
p.UnitPrice = (decimal)20.00; 
db.SubmitChanges(); 
}
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
Imagine o seguinte cenário.... 
Padrão-less Entidades Externas 
LINQ to SQL Aplicação
Grupo 4 
Mapeamento Objeto-Relacional com LINQ 
LINQ to SQL 
Imagine o seguinte cenário.... 
Padrão-less Entidades Externas 
LINQ to SQL Aplicação

Mapeamento Objeto-Relacional com LINQ

  • 1.
    Análise e ProjetoOrientado a Objetos Grupo 4 Mapeamento Objeto-Relacional com LINQ
  • 2.
  • 3.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ O que é LINQ? LINQ - Language integrated Query - é um conjunto de recursos introduzidos no .NET Framework 3.5 que permitem a realização de consultas diretamente em base de dados , documentos XML , estrutura de dados , coleção de objetos ,etc. usando uma sintaxe parecida com a linguagem SQL. Atenção você precisa do Visual Studio 2008 ou o Visual Web Developer 2008 Express (.NET Framework 3.5) instalado
  • 4.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Arquitetura LINQ OBS: LINQ to SQL é uma solução OR/M (Acesso a Dados) e os outros tipos de LINQ (Objects, Datasets, Entities, XML) são linguagens de consulta
  • 5.
  • 6.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to Object Consiste na execução de “queries” semelhantes às escritas em SQL (Structured Query Language) sobre coleções que implementam uma das interfaces IEnumerable ou IEnumerable<T>. Objetivo é realizar consultas sobre coleções que implementam as interfaces IEnumerable ou IEnumerable<T>, ou seja, Arrays, Listas genéricas do tipo List<T>, dicionários de dados, textos, etc.
  • 7.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Examples
  • 8.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Examples
  • 9.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Operadores Select - Faz uma projeção na coleção de dados para selecionar regiões relevantes entre os elementos. Where - Define regras de filtragem na coleção de dados que são avaliadas para cada item. SelectMany - Mapeamento estipulado pelo programador de uma coleção de dados para coleções. Sum, Min, Max, Average - Encontra a soma, o menor elemento, o maior elemento ou a média dos itens da coleção de dados, respectivamente. Join, GroupJoin - Faz a junção de duas coleções de dados, baseado em chaves de comum valor semântico em cada coleção. Take, TakeWhile - O primeiro seleciona os primeiros n ojectos da coleção, enquanto o segundo toma um predicado que seleciona os objectos que casam com o predicado. Skip, SkipWhile - Complementos dos anteriores, eles ignoram os primeiros n objetos da coleção, ou enquanto há casamento com o predicado. OfType - Seleciona objetos de determinado tipo.
  • 10.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Operadores Concat - Concatena duas coleções. OrderBy, ThenBy - O primeiro determina o critério de ordenação da coleção de dados, ascendente por padrão. O segundo especifica critérios subsequentes de ordenação. Reverse - Inverte a ordenação da coleção de dados. GroupBy - Extrai uma chave e retorna uma coleção para cada chave. Distinct - Remove instâncias repetidas na coleção. Union, Intersect, Except - Provem união, interseção e complementar em duas sequências, respectivamente. SequenceEqual - Verifica se todos os elementos de duas coleções são iguais. First, FirstOrDefault, Last, LastOrDefault - Retorna o primeiro elemento, o primeiro ou o valor padrão, o último, o último ou valor padrão da coleção de dados, respectivamente. Single - Retorna o único elemento que casa um predicado dado. Havendo nenhum ou múltiplos casamentos, uma exceção é lançada. ElementAt - Retorna o elemento em determinado índice na coleção de dados.
  • 11.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Operadores Any, All, Contains O primeiro verifica se algum elemento da coleção casa o predicado. O segundo verifica se todos os elementos da coleção casam o predicado. O terceiro verifica se a coleção contém determinado valor. Count Conta a quantidade de elementos em uma coleção. Ainda são especificados alguns operadores de conversão da coleção em outro tipo: • AsEnumerable: converte para IEnumerable<T>. • ToQueryable: converte para IQueryable<T>. • ToArray: converte para vetor. • ToList: converte para IList<T>. • ToDictionary: converte para IDictionary<K, T>, indexado por K. • ToLookup: converte para ILookup<K, T>, indexado por K. • Cast: converte uma coleção IEnumerable não-genérica para uma IEnumerable<T>, por conversão de tipo. • OfType: converte uma coleção IEnumerable não-genérica para uma IEnumerable<T>, incluindo somente elementos do tipo T.
  • 12.
  • 13.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to XML Visto que eliminar tamanha complexidade é um dos objetivos principais do LINQ to XML. Embora a plataforma .NET lhe oferece recursos para tratar com XML , o LINQ to XML vai além, pois ele integra os operadores padrão de consulta do LINQ com XML, e, além disso, o oferece também classes para criar e gerenciar facilmente XML. Dessa forma o LINQ to XML permite que você fique focado no que você tem que fazer e não em como fazer tornando assim o XML apenas uma fonte de dados para o LINQ.
  • 14.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ Examples <?xml version="1.0" encoding="utf-8" ?> <empregado> <!--secção pessoa--> <pessoa> <id>1</id> <nome>Jose Carlos</nome> <sobrenome>Macoratti</sobrenome> <idperfil>1</idperfil> </pessoa> <pessoa> <id>2</id> <nome>Jefferson</nome> <sobrenome>Andre</sobrenome> <idperfil>2</idperfil> </pessoa> <!--pseção perfil-> <perfil> <id>1</id> <perfildescricao>Gerente</perfildescricao> </perfil> <perfil> <id>2</id> <perfildescricao>Analista</perfildescricao> </perfil> <!--seção salario-> <salario> <idpessoa id="1" ano="2006" salarioano="10000,00" /> <idpessoa id="1"ano="2007" salarioano="15000,00" /> </salario> </empregado> XElement xml = XElement.Load(@"....Empregado.xml"); var consulta = from p in xml.Elements("empregado").Elements("pessoa") where (int)p.Element("id") == 1 select p;foreach(var registro in consulta) { Console.WriteLine("Pessoa: {0} {1}", registro.Element("nome"), registro.Element("sobrenome")); }
  • 15.
  • 16.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ DataSet o que é? O primeiro dos dois maiores componentes da arquitetura ADO.NET, veio pra substituir o antigo Recordset da ADO. Para a camada de apresentação, o DataSet está integrado com controles de GUI para a vinculação de dados. Para a camada intermediária, ele fornece um cache que preserva o formato relacional de dados, e inclui serviços simples rápidos de consulta e navegação a hierarquia. Principal característica : - Totalmente desconectado. Quando usar ? -Armazenar dados por um longo período. -Transferir dados para outras classes. -Fazer atualizações e alterações nos dados sem usar procedimentos armazenados nem declarações SQL. -Salvar e recuperar dados como um arquivo XML. -Poder ler dados e navegar pelos dados sem restrições para frente e para trás entre as tabelas do banco de dados.
  • 17.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to DataSet É um componente do. NET Framework versão 3.5, que simplifica as consultas permitindo aos desenvolvedores criar consultas com a própria linguagem de programação, em vez de usar uma linguagem de consulta separada e fornece a verificação em tempo de compilação. Positivo Negativo Otimiza a performance do banco reduzindo o número de acessos. Recursos de consulta limitados. Manipular os dados em memória mantendo sua forma relacional. Soluções para oracle não são padrão. Permite consultar dados consolidados de uma ou mais fontes.
  • 18.
  • 19.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL é um componente do. NET Framework versão 3.5, que fornece uma infra-estrutura em tempo de execução para a gestão dados relacionais como objetos. Suporte a transações Functions Stored Procedures Views ORM a grosso modo é uma técnica que reúne um conjunto de classes que mapeiam as entidades de um bando de dados relacional.
  • 20.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL é um componente do. NET Framework versão 3.5, que fornece uma infra-estrutura em tempo de execução para a gestão dados relacionais como objetos. Suporte a transações Functions Stored Procedures Views Aplicação LINQ to SQL ADO.NET SQL Server ORM a grosso modo é uma técnica que reúne um conjunto de classes que mapeiam as entidades de um bando de dados relacional.
  • 21.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL Classes geradas pelo LINQ to SQL public partial class NorthwindDataContext : System.Data.Linq.DataContext public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged public partial class Category : INotifyPropertyChanging, INotifyPropertyChanged
  • 22.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL Select using( NorthwindDataContext db = new NorthwindDataContext()) { IEnumerable<Product> beverages = from p in db.Products where p.Category.CategoryName == "Beverages" orderby p.ProductName select p; }
  • 23.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL Update using( NorthwindDataContext db = new NorthwindDataContext()) { Product p = db.Products.First(); p.UnitPrice = (decimal)20.00; db.SubmitChanges(); }
  • 24.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL Imagine o seguinte cenário.... Padrão-less Entidades Externas LINQ to SQL Aplicação
  • 25.
    Grupo 4 MapeamentoObjeto-Relacional com LINQ LINQ to SQL Imagine o seguinte cenário.... Padrão-less Entidades Externas LINQ to SQL Aplicação