SelectMany – Simplificando consultas e estruturas

Olá,

Hoje vamos discutir sobre um query method chamado SelectMany e como ele pode facilitar (e muito) nossas consultas com objetos aninhados.

selectMany2

É bastante comum enfrentarmos cenários onde nos deparamos com objetos aninhados, isto é, uma instância de objeto contida dentro de outra instância de objeto por meio de uma associação ou agregação. E ainda (para melhorar) esta associação pode ser múltipla, onde a cardinalidade da associação não é 1:1 (um-para-um) e sim 1:N (um-para-muitos) ou N:N (muitos-para-muitos).

Vamos encarar o seguinte cenário: um cliente realiza pedidos, cada pedido pode conter um ou mais produtos, onde cada produto possui quantidade e valor próprios para o pedido.

Diante deste cenário podemos construir o seguinte modelo de classes:

pdv

Agora o desafio: se quiséssemos consultar, todos os produtos comprados pelo cliente, como faríamos? Levando em consideração que já temos toda a estrutura montada em memória, com todos os dados preenchendo cada uma das propriedades do modelo.

Poderíamos simplesmente construir um laço de repetição (FOR ou FOREACH), iterar por entre as propriedades de nosso modelo, até alcançar os itens do pedido e assim identificar os produtos que foram comprados, como no exemplo abaixo:

List<Produto> produtos = new List<Produto>();
foreach (var pedido in cliente.Pedidos)
{
    foreach (var itemPedido in pedido.Itens)
    {
        produtos.Add(itemPedido.Produto);   
    }
}

Ou então, podemos utilizar o query method SelectMany! O SelectMany concatena sequências de resultados em uma única resposta, isto é, acumula o resultado de diversas consultas dentro de uma única resposta.

selectMany3

Veja, logo abaixo, como nosso código fica mais simples executando apenas uma consulta e retornando todos os produtos comprados por um cliente através de uma query.

var queryProdutos = cliente.Pedidos.SelectMany(p => p.Itens.Select(i => i.Produto));

Este foi um exemplo de como utilizar o query method SelectMany.

Mais uma vez os query methods e as consultas LINQ salvando o dia!

Bons estudos e []s!

Por

Fernando Henrique Inocêncio Borba Ferreira

Microsoft Most Valuable Professional – Data Platform Development

Anúncios

One Response to SelectMany – Simplificando consultas e estruturas

  1. Leandro says:

    Muito bom

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: