error left join linq

2

I can not access the methods of a child class that was created using database first:

namespace Dados
{
    using System;
    using System.Collections.Generic;

    public partial class pessoa
    {
        public pessoa()
        {
            this.pessoa_endereco = new HashSet<pessoa_endereco>();
        }

        public int id { get; set; }
        public string tipo { get; set; }
        public string razao_social { get; set; }
        public string nome_fantasia { get; set; }
        public string cpf_cnpj { get; set; }
        public string rg_insc_estadual { get; set; }
        public string insc_substituicao { get; set; }
        public string insc_municipal { get; set; }
        public Nullable<System.DateTime> data_expedicao_rg { get; set; }
        public string orgao_expedidor_rg { get; set; }

        public virtual administrador administrador { get; set; }
        public virtual banco banco { get; set; }
        public virtual cliente cliente { get; set; }
        public virtual filial filial { get; set; }
        public virtual fornecedor fornecedor { get; set; }
        public virtual ICollection<pessoa_endereco> pessoa_endereco { get; set; }
        public virtual usuario usuario { get; set; }
        public virtual vendedor vendedor { get; set; }
    }
}

The child class is:

namespace Dados
{
    using System;
    using System.Collections.Generic;

    public partial class pessoa_endereco
    {
        public int id { get; set; }
        public int pessoa_id { get; set; }
        public string logradouro { get; set; }
        public string numero { get; set; }
        public string complemento { get; set; }
        public string ponto_referencia { get; set; }
        public string cep { get; set; }
        public string bairro { get; set; }
        public Nullable<int> cidade_id { get; set; }
        public string nome_contato { get; set; }
        public string telefone_1 { get; set; }
        public string ramal_telefone_1 { get; set; }
        public string telefone_2 { get; set; }
        public string ramal_telefone_2 { get; set; }
        public string celular { get; set; }
        public string email { get; set; }

        public virtual cidade cidade { get; set; }
        public virtual pessoa pessoa { get; set; }
    }
}

controller:

        takeeatEntities context = new takeeatEntities();

        var pessoas = context.pessoa
                     .GroupJoin(context.pessoa_endereco, p => p.id, a => a.pessoa_id, (p, a) => new { p, a })
                     .SelectMany(a => a.a.DefaultIfEmpty(), (p, a) => new PessoaDados
                     {
                         Id = p.p.id,
                         Razao_social = p.p.razao_social,
                         p.a. //não tem acesso aos metodos da pessoa_endereço
                     })
                     .ToList();

How can I access these methods in the controller, because when I put p.a. it does not bring any field of person_address, if I do p.p. brings me all the fields only of the parent class person

    
asked by anonymous 01.06.2017 / 14:20

1 answer

2

I did not understand your question any more looking at your code what I think is that you did not make the correct instance in the child class, so you can later get its attributes so let's see what it looks like:

FATHER CLASS:

public partial class pessoa
{       
    public int id { get; set; }
    public string tipo { get; set; }
    public string razao_social { get; set; }
    public string nome_fantasia { get; set; }
    public string cpf_cnpj { get; set; }
    public string rg_insc_estadual { get; set; }
    public string insc_substituicao { get; set; }
    public string insc_municipal { get; set; }
    public Nullable<System.DateTime> data_expedicao_rg { get; set; }
    public string orgao_expedidor_rg { get; set; }

    public virtual administrador administrador { get; set; }
    public virtual banco banco { get; set; }
    public virtual cliente cliente { get; set; }
    public virtual filial filial { get; set; }
    public virtual fornecedor fornecedor { get; set; }          
    public virtual usuario usuario { get; set; }
    public virtual vendedor vendedor { get; set; }

}

DAUGHTER CLASS:

  public partial class pessoa_endereco : pessoa  // neste caso a classe filha herda os atributos da classe pai
        {
            public int id { get; set; }
            public int pessoa_id { get; set; }
            public string logradouro { get; set; }
            public string numero { get; set; }
            public string complemento { get; set; }
            public string ponto_referencia { get; set; }
            public string cep { get; set; }
            public string bairro { get; set; }
            public Nullable<int> cidade_id { get; set; }
            public string nome_contato { get; set; }
            public string telefone_1 { get; set; }
            public string ramal_telefone_1 { get; set; }
            public string telefone_2 { get; set; }
            public string ramal_telefone_2 { get; set; }
            public string celular { get; set; }
            public string email { get; set; }
            public virtual cidade cidade { get; set; }
            public virtual pessoa pessoa { get; set; }
        }

In this case with the child class you can access all the attributes of the parent that are public, so you do not have to repeat in the child class everything that is common in the parent class. In the child class you only have the particular attributes of each person_address.

After that you can cause the class to have access. I hope I have helped try to do so. Be careful because the code has not been tested look right to eliminate the errors.

    
01.06.2017 / 17:46