none
Consulta LInq ou Lambda em tabelas relacionadas RRS feed

  • Pergunta

  • Tenho 2 tabelas relacionadas, clientes e pedidos.Preciso fazer uma consulta linq ou lambda em pedidos e preencher um DataGrid dinamicamente. Em uma das colunas exibir o nome do cliente dinamicamente. Como devo proceder ?.

    namespace DAL.MODEL
    {
        public class Cliente
        {
            public int Id { get; set; }
            public string Nome { get; set; }
            public virtual ICollection<Pedido> PedidoX { get; set; }
        }
    }
    
    namespace DAL.MODEL
    {
        public class Pedido
        {
            public int Id { get; set; }
            public Decimal Total { get; set; }
    
            public int ClienteId { get; set; }
            public virtual Cliente ClienteX { get; set; }
        }
    }
    
    public void CarregarGrid()
        {
            try
            {
                 Contexto ctx = new Contexto();
    
        var lista = from c in ctx.PedidoCtx.Include(c => c.ClienteX) select c;
    
                dgvPesquisar.DataSource = lista.ToList();
    
                dgvPesquisar.Columns["pedido"].DataPropertyName = "Id";
                dgvPesquisar.Columns["cliente"].DataPropertyName = "ClienteX.Nome";
            }
            catch (Exception)
            {
                throw;
            }
        }


    quinta-feira, 24 de maio de 2018 15:09

Respostas

  • Bom dia,

     basta adicionar mais uma tabela:

    itens = Db.Cliente
                                .Join(Db.Pedido,
                                      cliente => cliente.Id,
                                      pedido => pedido.IdCliente,
                                      (cliente, pedido) => new { pedido, cliente })
                                .Join(Db.Produto,
                                      cliente => cliente.cliente.Id,
                                      produto => produto.IdCliente,
                                      (cliente, produto) => new { cliente, produto })
                                .Select(i => i.cliente.cliente.Nome)
                                .ToList();
     Existe o Include sim, segue link Include Entity Framework . Não uso include para consultas sql prefiro fazer dessa maneira conforme exemplo...

    segunda-feira, 4 de junho de 2018 11:53

Todas as Respostas

  • Boa tarde,

       Veja se isso lhe ajuda:

                             itens = ctx.Cliente
                                     .Join(ctx.Pedido,
                                           cliente => cliente.Id,
                                           pedido => pedido.IdCliente,
                                           (cliente, pedido) => new { pedido, cliente })
                                     .Select(i => i.cliente.Nome)
                                     .ToList();

        No "select" pode selecionar quaisquer colunas de ambas as tabelas. Dê uma olhada nesse link para mais informações:

    quinta-feira, 24 de maio de 2018 16:05
  • Olá Daniel. Obrigado pela ajuda.

    Sua orientação deu certo. Consegui realizar a consulta. Mas agora tenho um cenário um pouco mais complicado. Existe uma terceira tabela que são os itens dos pedidos, ou seja, os produtos que são adicionados ao pedido. Num outro momento preciso consultar os pedidos, o cliente e os produtos. Como poderia adaptar a consulta a este cenário ?. A propósito, li que existe o método include que me pareceu ter uma sintaxe mais simples ou já teria um join embutido. Procede ?. Muito Obrigado.

    sexta-feira, 1 de junho de 2018 20:59
  • Bom dia,

     basta adicionar mais uma tabela:

    itens = Db.Cliente
                                .Join(Db.Pedido,
                                      cliente => cliente.Id,
                                      pedido => pedido.IdCliente,
                                      (cliente, pedido) => new { pedido, cliente })
                                .Join(Db.Produto,
                                      cliente => cliente.cliente.Id,
                                      produto => produto.IdCliente,
                                      (cliente, produto) => new { cliente, produto })
                                .Select(i => i.cliente.cliente.Nome)
                                .ToList();
     Existe o Include sim, segue link Include Entity Framework . Não uso include para consultas sql prefiro fazer dessa maneira conforme exemplo...

    segunda-feira, 4 de junho de 2018 11:53