Code: Detail

Especializaçõ, Ajax, C#, Visual, Wcf, XML FrameWork .net 1.1, 2.0 e 4.0, OO, Design Patterns Arquitetura SOA, DDD, MVP e MVVM Html, Css, JavaScript Sql Server 2000, 2005 e 2008 Oracle 8i e 9i Asp3, Visual Basic 6 e COM+

C# - (Portuguese)

Dapper 1.5.0 Mapeamento de Lista dentro de Lista

DAPPER 1.5.0 Exemplo de Mapeamento do resultado de um select em banco de dados DB2 que possui uma Lista de Lojas cada loja uma lista de pedidos e cada pedido uma lista de produtos.

Last update: 03/07/2017

using Dapper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

    public class LojaDto
        public int Key { get; set; }
        public string Nome { get; set; }
        public List<PedidoDto> Pedidos { get; set; }

    public class PedidoDto
        public int Numero { get; set; }
        public string Status { get; set; }
        public List<ProdutoPedidoDto> Produtos { get; set; }

    public class ProdutoPedidoDto
        public int Key { get; set; }
        public int Qtd_Pedida { get; set; }
        public double Vlr_Unit { get; set; }

        private void button1_Click(object sender, EventArgs e)
            string _sql;
            IBM.Data.DB2.DB2Connection _dbCon = new IBM.Data.DB2.DB2Connection("Server=IPDOSERVIDOR:PORTA;Database=BANCO;UID=USUARIO;PWD=SENHA;");


            _sql = "select  loja.cd_loja Key, " +
                    "        loja.nm_loja Nome, " +
                    "        pedido.nr_pedido Numero, " +
                    "        pedido.cd_status Status, " +
                    "        produto_pedido.cd_produto Key, " +
                    "        produto_pedido.QT_PEDIDA Qtd_Pedida, " +
                    "        produto_pedido.VL_UNITARIO_PEDIDO Vlr_Unit " +
                    "from loja loja " +
                    "inner join pedido pedido " +
                    "on loja.cd_loja = pedido.cd_loja " +
                    "inner join produto_pedido produto_pedido " +
                    "on pedido.NR_PEDIDO = produto_pedido.NR_PEDIDO " +
                    "where pedido.dh_criacao between '2015-06-29 00:00:00' and '2015-06-29 23:59:59' ";

            var lookup_loja = new Dictionary<int, LojaDto>();
            var lookup_pedido = new Dictionary<int, PedidoDto>();

            List<LojaDto> _lojaDtoList = _dbCon.Query<LojaDto,
                                                           (_lojaDto, _pedidoDto, _produtoPedidoDto) =>
                                                               LojaDto _objlojaDto;
                                                               PedidoDto _objPedidodto;

                                                               if (!lookup_loja.TryGetValue(_lojaDto.Key, out _objlojaDto))
                                                                   lookup_loja.Add(_lojaDto.Key, _objlojaDto = _lojaDto);

                                                               if (_objlojaDto.Pedidos == null)
                                                                   _objlojaDto.Pedidos = new List<PedidoDto>();

                                                               if (!lookup_pedido.TryGetValue(_pedidoDto.Numero, out _objPedidodto))
                                                                   lookup_pedido.Add(_pedidoDto.Numero, _objPedidodto = _pedidoDto);


                                                               if (_objPedidodto.Produtos == null)
                                                                   _objPedidodto.Produtos = new List<ProdutoPedidoDto>();

                                                               return _objlojaDto;
                                                           splitOn: "Numero,Key"


            List<LojaDto> _lojas = lookup_loja.Values.ToList<LojaDto>();



Users who have marked this routine as a favorite
The site ti4fun is not responsible for the content on sites for which you have external links

Articles, routines, tips, forums, blogs or any other content posted on ti4fun site is not tested and not validated, so you should test and validate any information collected on the ti4fun site before applying it to final use environment, such as example, production. the TI4FUN site is not responsible for quality or for any damages, direct, indirect or consequential, from use of any content posted by the authors in the site.

All content published on the ti4fun site is the responsibility of the author and do not necessarily express the views of the site ti4fun and its employees.