C#
- Exibindo mestre-detalhe com LINQ
![]() |
Neste artigo veremos como exibir dados relacionados no formato mestre-detalhe usando uma consulta LINQ com Select new. |
Uma consulta é uma expressão que recupera dados de uma fonte de dados. As consultas LINQ são muito versáteis e poderosas, e , todas as operações de consulta LINQ consistem em três ações distintas:
Para mostrar sua versatilidade veremos um exemplo prática de utilização de uma consulta LINQ para obter dados relacionados.
recursos usados:
Criando o projeto no VS 2019 Community
Vamos criar um projeto usando a linguagem C# do tipo Console para .NET Core : Console App(.NET Core)
![]() |
Podemos chamar o projeto de CShp_Linq1.
No projeto criado vamos incluir uma pasta Models e nesta pasta vamos criar 3 classes: Pedido, PedidoItem e SubItem
1- Pedido
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace CShp_Linq1.Models
{
public class Pedido
{
public Pedido()
{
Items = new ObservableCollection<PedidoItem>();
}
public string Codigo { get; set; }
public ICollection<PedidoItem> Items { get; set; }
}
}
|
2- PedidoItem
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace CShp_Linq1.Models
{
public class PedidoItem
{
public PedidoItem()
{
SubItens = new ObservableCollection<SubItem>();
}
public decimal Quantidade { get; set; }
public decimal Preco { get; set; }
public ICollection<SubItem> SubItens { get; set; }
}
}
|
3- SubItem
using System;
namespace CShp_Linq1.Models
{
public class SubItem
{
public DateTime Data { get; set; }
public decimal Quantidade { get; set; }
public string NomeCliente { get; set; }
}
}
|
Nosso objetivo é exibir todos os dados destas classes em uma tabela conforme a figura abaixo:
CodigoPedido | ItemPreco | ItemQuantidade | SubItemQuantidade | SubItem.NomCliente |
123 | 30 | 3 | 1 | Cliente1 |
123 | 30 | 3 | 2 | Cliente2 |
123 | 500 | 50 | 20 | Cliente1 |
123 | 500 | 50 | 20 | Cliente2 |
123 | 500 | 50 | 10 | Cliente3 |
Este é um trabalho para o LINQ.
Abra o arquivo Program e inclua o código a seguir:
using CShp_Linq1.Models;
using System;
using System.Collections.ObjectModel;
using System.Linq;
namespace CShp_Linq1
{
class Program
{
static void Main(string[] args)
{
Pedido pedido = new Pedido();
pedido.Codigo = "123";
pedido.Items.Add(new PedidoItem()
{
Preco = 30,
Quantidade = 3,
SubItens = new Collection<SubItem>()
{
new SubItem() { Data = DateTime.Now, Quantidade = 1, NomeCliente = "Cliente1" },
new SubItem() { Data = DateTime.Now, Quantidade = 2, NomeCliente = "Cliente2" }
}
});
pedido.Items.Add(new PedidoItem()
{
Preco = 500,
Quantidade = 50,
SubItens = new Collection<SubItem>()
{
new SubItem() { Data = DateTime.Now, Quantidade = 20, NomeCliente = "Cliente1" },
new SubItem() { Data = DateTime.Now, Quantidade = 20, NomeCliente = "Cliente2" },
new SubItem() { Data = DateTime.Now, Quantidade = 10, NomeCliente = "Cliente3" }
}
});
var tabela = from item in pedido.Items
from subItem in item.SubItens
select new
{
CodigoPedido = pedido.Codigo,
ItemPreco = item.Preco,
ItemQuantidade = item.Quantidade,
SubItemQuantidade = subItem.Quantidade,
SubItemNomeCliente = subItem.NomeCliente
};
foreach(var info in tabela)
{
Console.WriteLine($"{info.CodigoPedido} \t {info.ItemPreco} \t {info.ItemQuantidade}
\t {info.SubItemNomeCliente} \t {info.SubItemQuantidade}" );
}
Console.ReadLine();
}
}
}
|
A consulta LINQ usamos as duas entidades item e subitem e estamos criando uma nova estrutura de dados. Essa estrutura é constituída de objetos compostos.
Assim, usando a cláusula select new, criamos novos objetos de um tipo anônimo como resultado de uma consulta.
Executando o projeto iremos obter o resultado abaixo como esperado:
Pegue o código
do projeto aqui :
CShp_Linq1.zip
"Qual é
mais fácil? Dizer ao paralítico: Estão perdoados os teus pecados, ou dizer:
Levanta-te, toma o teu leito e anda?
Ora, para que saibais que o Filho do Homem tem sobre a terra autoridade para
perdoar pecados — disse ao paralítico: Eu te mando: Levanta-te, toma o teu
leito e vai para tua casa."
Marcos 2:9-11
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET