Core Entityframework called separate tables

Asked

Viewed 32 times

0

I would like to filter a list, by the id of a Collaborator, my problem is that when returning to the list it returns everything from the bank.

I need to filter for example all Projects that the Collaborator with Id=10 is involved, someone could help me?

I am using Asp.net Core and EF.

Class Clientprojectprogramworker

public class ClienteProjetoColaborador
{
    public int IdClienteProjetoColaborador { get; set; }

    [Display(Name = "Projeto")]
    public int? IdProjeto { get; set; }

    [Display (Name ="Cliente")]
    public int? IdCliente { get; set; }

    [Display(Name = "Colaborador")]
    public int? IdColaborador { get; set; }

    [Display(Name = "Atividade")]
    public int? IdAtividade { get; set; }

    [Display(Name = "Status")]
    public int? IdStatus { get; set; }

    [Display(Name = "Tipo")]
    public int? IdTipoStatusAtividade { get; set; }

    [Display(Name = "Data Inicial")]
    public DateTime? DataInicial { get; set; }

    [Display(Name = "Data Final")]
    public DateTime? DataFinal { get; set; }

    public decimal? EsforcoEstimado { get; set; }
    public decimal? EsforcoReal { get; set; }
    public string Observacao { get; set; }
    public string UsuarioLog { get; set; }
    public DateTime? DataLog { get; set; }
    public string DescricaoLog { get; set; }
    [Display(Name = "Atividade")]
    public virtual Atividade IdAtividadeNavigation { get; set; }
    [Display(Name = "Cliente")]
    public virtual Cliente IdClienteNavigation { get; set; }
    [Display(Name = "Colaborador")]
    public virtual Colaboradores IdColaboradorNavigation { get; set; }
    [Display(Name = "Projeto")]
    public virtual Projeto IdProjetoNavigation { get; set; }
    [Display(Name = "Status")]
    public virtual StatusProjeto IdStatusNavigation { get; set; }
    [Display(Name = "Status")]
    public virtual TipoStatusAtividade IdTipoStatusAtividadeNavigation { get; set; }

    public Colaboradores Colaboradores { get; set; }
    List<ClienteProjetoColaborador> ClienteProjetoColaboradores { get; set; }
}

Class Collaborators

 public class Colaboradores
{
    public Colaboradores()
    {
        CalculoProjeto = new HashSet<CalculoProjeto>();
        ClienteProjetoColaborador = new HashSet<ClienteProjetoColaborador>();
        ProjetoIdGerenteContaNavigation = new HashSet<Projeto>();
        ProjetoIdResponsavelCptNavigation = new HashSet<Projeto>();
    }

    public int IdColaborador { get; set; }
    [Display(Name = "Nome Colaborador")]
    public string NomeColaborador { get; set; }
    [Display(Name = "Departamento")]
    public int IdDepartamento { get; set; }
    [Display(Name = "Cargo")]
    public int IdCargo { get; set; }
    [Display(Name = "Custo Total Colaborador")]
    public int? IdCustoTotalColaborador { get; set; }
    public string UsuarioLog { get; set; }
    public DateTime? DataLog { get; set; }
    public string DescricaoLog { get; set; }
    [Display(Name = "Cargo")]
    public virtual Cargo IdCargoNavigation { get; set; }
    [Display(Name = "Custo Colaborador")]
    public virtual CustoTotalColaborador IdCustoTotalColaboradorNavigation { get; set; }
    [Display(Name = "Departamento")]
    public virtual Departamento IdDepartamentoNavigation { get; set; }
    public virtual ICollection<CalculoProjeto> CalculoProjeto { get; set; }
    public virtual ICollection<ClienteProjetoColaborador> ClienteProjetoColaborador { get; set; }
    public virtual ICollection<Projeto> ProjetoIdGerenteContaNavigation { get; set; }
    public virtual ICollection<Projeto> ProjetoIdResponsavelCptNavigation { get; set; }

    List<Colaboradores>listaColab { get; set; }
}

Viewmodel I will return

    public class ViewModel
{
    [Key]
   public int ColaboradorViewModelId { get; set; } 

    public string NomeColaborador { get; set;  } //TABELA COLABORADORES

    public int? IdProjeto { get; set; } // TABELA DO PROJETO

    public int? IdCliente { get; set; } // TABELA DO CLIENTE



}

Index method I want to make the filter.

    public IActionResult Index()
    {
        var Id = 10;

        List<ViewModel> ListaExemplo = new List<ViewModel>();

        //CONSULTA DE DADOS NO BD

        var listaBD = (from Colaboradores in _context.Colaboradores
                       join ClienteProjetoColaborador in _context.ClienteProjetoColaborador on Colaboradores.IdColaborador equals ClienteProjetoColaborador.IdColaborador

                       select new { Colaboradores.IdColaborador, Colaboradores.NomeColaborador, ClienteProjetoColaborador.IdCliente, ClienteProjetoColaborador.IdProjeto }).ToList();




        //PERCORRE A LISTA DE CLIENTES E PREENCHE A VIEW MODEL

        foreach (var item in listaBD)
        {
            ViewModel VMColab = new ViewModel();
            VMColab.ColaboradorViewModelId = item.IdColaborador;
            VMColab.NomeColaborador = item.NomeColaborador;
            VMColab.IdCliente = item.IdCliente;
            VMColab.IdProjeto = item.IdProjeto;
            ListaExemplo.Add(VMColab);
        }



        return View(ListaExemplo);
    }

1 answer

0


To filter in the Entity Framework just use the LINQ (Integrated Language Query) in context call.

For example, if I want to filter all Contributors that have the Id with value 10 just make the call this way

 var listaBD = _context.Colaboradores.Where(x => x.IdColaborador == 10);

However, as in your case, the field is marked as Primary Key (signaling that it cannot be repeated in the table), so it is not necessary to select everyone who has this Id (up because it would only return one element), so you can change the Where for First, resulting in that call:

var listaBD = (from Colaboradores in _context.Colaboradores.First(x => x.IdColaborador == 10)
    join ClienteProjetoColaborador in _context.ClienteProjetoColaborador on Colaboradores.IdColaborador equals ClienteProjetoColaborador.IdColaborador

    select new { Colaboradores.IdColaborador, Colaboradores.NomeColaborador, ClienteProjetoColaborador.IdCliente, ClienteProjetoColaborador.IdProjeto }).ToList();
  • Thank you! clarified my doubts

  • No problem my good, you can count on Sopt’s people for everything! ;)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.