Return data from 2 tables entity framework

0

I have the following table: Movement -movement -Indicator -ProductId

When I select a particular customer I want to list all of the trades in which they are together with the product. how would I call this inside the controller?

That's what I thought so far.

    public ActionResult MovimentacaoCliente(int id)
    {
        int clienteid = 0;

        using (Db db = new Db())
        {
            Cliente cli = db.Cliente.FirstOrDefault(x => x.Id == id);
            clienteid = cli.Id;

            List<MovimentacaoVM> pedidos = db.Movimentacao.Where(x => x.ClienteId == clienteid).ToArray().Select(x => new MovimentacaoVM(x)).ToList();

            return View();
        }
    }

My Model Drive for you to understand:

public int MovimentacaoId { get; set; }

public int ClienteId { get; set; }
public int ProdutoId { get; set; }
public string ProdutoNome { get; set; }
public string ClienteNome { get; set; }

public DateTime DataCriacao { get; set; }


[ForeignKey("ProdutoId")]
public virtual Produto Produto { get; set; }

[ForeignKey("ClienteId")]
public virtual Cliente Cliente { get; set; }

Drive vm

public class MovimentacaoVM
{
public MovimentacaoVM()
{

}

public MovimentacaoVM(Movimentacao row)
{
    MovimentacaoId = row.MovimentacaoId;
    ClienteId = row.ClienteId;
    DataCriacao = row.DataCriacao;
    ProdutoId = row.ProdutoId;
    ClienteNome = row.ClienteNome;
    ProdutoNome = row.ProdutoNome;
}
[Key]
public int MovimentacaoId { get; set; }
public int ProdutoId { get; set; }
public int ClienteId { get; set; }
public string ProdutoNome { get; set; }
public string ClienteNome { get; set; }
public DateTime DataCriacao { get; set; }

public IEnumerable<SelectListItem> Produtos { get; set; }
public IEnumerable<SelectListItem> Cliente { get; set; }
    
asked by anonymous 07.02.2018 / 00:27

1 answer

3

So you want to list all the moves a customer made and pull all the products from those drives?

Then you have 2 relations one n: n (of products for drives) and one of 1: n (client and drives).

So what would I do,

Client Class

public class Cliente {
    public int Id { get; set; }
    // outras propriedades ...
    List<Movimentacao> Movimentacao { get; set; }  
}

Drive Class

public class Movimentacao {
    public int Id { get; set; }
    // outras propriedades ...

    public Int ClienteId { get; set; }
    public Cliente Cliente { get; set; }
    List<MovimentacaoProdutos> MovProdutos { get; set; }  
}

Class MovementsProducts

public class MovimentacaoProdutos {
    public int ProdutoId { get; set; }
    public int MovimentacaoId { get; set; }
    public Produto Produto{ get; set; }
    public Movimentacao Movimentacao { get; set; }

    // outras propriedades ...  
}

Product Class

public class Produto {
    public int Id { get; set; }
    // outras propriedades ...

    List<MovimentacaoProdutos> MovProdutos { get; set; }  
}

And how would I do the query

public ActionResult MovimentacaoCliente(int id)
{
    using (Db db = new Db())
    {
        List<Movimentacao> movs = db.Movimentacao.Include(m => m.Cliente)
                          .Include(m => m.MovProdutos).ThenInclude(mp => mp.Produto)
                          .Where(m => m.ClienteId == id);

        // e assim você vai conseguir ter acesso ao cliente e aos produtos
        // desculpa se faltou alguma coisa, fiz agora de cabeça, mas a logica seria +/- essa.

        return View();
    }
}

I hope I have helped:)

Strong Embrace.

    
13.02.2018 / 15:03