1
resposta

Dúvidas LINQ

Prof. poderia informar o link de exemplos avançados usando LINQ. Exemplos, Usando INNER JOIN, Left JOIN, Group by, having, etc. Com diversas tabelas e com várias condições para essa consulta. Exemplos de Grupamentos, Contagem, entre outros?

1 resposta

Olá, Silvera! Entendo que você está procurando exemplos avançados de consultas utilizando LINQ, incluindo operações como INNER JOIN, LEFT JOIN, GROUP BY, HAVING, entre outros. Vou tentar te ajudar com alguns exemplos.

Para exemplificar, vamos considerar que temos duas classes, Pedido e Produto, com um relacionamento muitos para muitos entre elas:

public class Pedido
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public virtual ICollection<Produto> Produtos { get; set; }
}

public class Produto
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public virtual ICollection<Pedido> Pedidos { get; set; }
}
  1. INNER JOIN - Vamos supor que queremos obter todos os pedidos que contêm um determinado produto:
var produtoId = 1; // exemplo de id de produto
var pedidosComProduto = context.Pedidos
    .Where(pedido => pedido.Produtos.Any(produto => produto.Id == produtoId))
    .ToList();
  1. LEFT JOIN - Em LINQ, um LEFT JOIN pode ser um pouco mais complexo. Vamos supor que queremos obter todos os pedidos, e para cada pedido, queremos saber se ele contém um determinado produto:
var produtoId = 1; // exemplo de id de produto
var pedidosEProduto = from pedido in context.Pedidos
    from produto in pedido.Produtos.DefaultIfEmpty()
    where produto == null || produto.Id == produtoId
    select new { Pedido = pedido, Produto = produto };
  1. GROUP BY - Suponha que queremos saber quantos produtos cada pedido contém:
var quantidadeProdutosPorPedido = context.Pedidos
    .Select(pedido => new { PedidoId = pedido.Id, Quantidade = pedido.Produtos.Count })
    .ToList();
  1. HAVING - Em LINQ, a cláusula HAVING é geralmente representada por um WHERE após um GROUP BY. Suponha que queremos saber quais pedidos contêm mais de 5 produtos:
var pedidosComMaisDeCincoProdutos = context.Pedidos
    .GroupBy(pedido => pedido.Id)
    .Where(grupo => grupo.Count() > 5)
    .Select(grupo => grupo.Key)
    .ToList();
  1. Múltiplas Condições - Agora, vamos supor que queremos obter todos os pedidos que contêm um determinado produto e foram feitos em uma determinada data:
var produtoId = 1; // exemplo de id de produto
var dataPedido = DateTime.Today; // exemplo de data
var pedidosComProdutoEData = context.Pedidos
    .Where(pedido => pedido.Data == dataPedido && pedido.Produtos.Any(produto => produto.Id == produtoId))
    .ToList();

Por favor, note que esses são apenas exemplos simplificados. As consultas reais podem ser mais complexas dependendo das suas necessidades e do esquema do seu banco de dados. Além disso, é importante lembrar que as consultas LINQ são convertidas em SQL pelo Entity Framework, então nem todas as operações que são possíveis em LINQ serão possíveis ou eficientes em SQL.

Espero ter ajudado e bons estudos!