Error When Generating Scaffold

Asked

Viewed 111 times

2

I scaffolding generating the controller, and Index is showing an error in

(f => f.Position)

with this mistake:

Cannot Convert lambda Expression to type 'string' because it is not a delegate

the class Employee Inherits People, and has as relationship Position, the class Person has as relationship Type and Personal Below is the Controller

public ActionResult Index()
{
    var pessoas = (Funcionario)db.Pessoas.Include(f => f.PessoaEndereco).Include(f => f.Tipo).Include(f => f.Cargo);
    return View(pessoas.ToList());
}

Here the classes:

public class Pessoa
{
    [Key]
    public int PessoaID { get; set; }

    [Required(ErrorMessage = "Preencha o nome")]
    [DisplayName("Nome")]
    [StringLength(150, MinimumLength = 2, ErrorMessage = "O nome deve ter no mínimo 2 e no máximo 150 caracteres.")]
    public string Nome { get; set; }

    [DisplayName("Telefone")]
    public string Telefone { get; set; }

    [DisplayName("Celular")]
    public string Celular { get; set; }

    [DisplayName("WhatsApp")]
    public string Whatsapp { get; set; }

    [DisplayName("Email")]
    [StringLength(150, ErrorMessage = "O E-mail deve ter no máximo 150 caracteres.")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Preencha o CPF")]
    [DisplayName("CPF")]
    [StringLength(14, MinimumLength = 14, ErrorMessage = "O CPF deve 14 caracteres.")]
    public string CPF { get; set; }

    //relacionamentos
    public int TipoPessoaID { get; set; }
    public virtual TipoPessoa Tipo { get; set; }

    public int PessoaEnderecoID { get; set; }
    public virtual PessoaEndereco PessoaEndereco { get; set; }
}


public class TipoPessoa
{
    [Key]
    public int TipoPessoaID { get; set; }

    [DisplayName("Tipo: ")]
    [Required(ErrorMessage = "Informe o nome do tipo de usuário")]
    [Remote("VerificaTipo", "TipoPessoa", ErrorMessage = "Esse TIPO já existe no sistema")]
    //[RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Favor informe um e-mail válido")]
    public string Descricao { get; set; }

    //relacionamentos
    public virtual ICollection<Pessoa> Usuarios { get; set; }

}


public class PessoaEndereco
{
    [Key]
    public int PessoaEnderecoID { get; set; }

    //Relacionamentos
    public int PessoaID { get; set; }
    public virtual Pessoa Pessoa { get; set; }

    public int EnderecoID { get; set; }
    public virtual Endereco Endereco { get; set; }
}


public class Funcionario:Pessoa
{
    [Required(ErrorMessage = "Preencha o RG")]
    [DisplayName("RG")]
    public string RG { get; set; }

    [Required(ErrorMessage = "Preencha o numero da CTPS")]
    [DisplayName("CTPS")]
    public string CTPS { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    [Required(ErrorMessage = "Preencha data de nascimento")]
    [DisplayName("Data de Nascimento")]
    public DateTime DataNascimento { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    [Required(ErrorMessage = "Preencha a data de admissão")]
    [DisplayName("Data de Admissão")]
    public DateTime DataAdmissao { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    [DisplayName("Data de Demissão")]
    public DateTime DataDemissao { get; set; }

    [DisplayFormat(DataFormatString = "{0:c}")]
    [Required(ErrorMessage = "Preencha o Salário.")]
    [DisplayName("Salário")]
    public decimal Salario { get; set; }

    [DisplayName("Confirmar E-mail")]
    [Compare("Email", ErrorMessage = "E-mail e confirmação não são identicos.")]
    public string ConfirmaEmail { get; set; }

    [StringLength(25, MinimumLength = 5, ErrorMessage = "A senha deve ter no mínimo 5 e no máximo 25 caracteres.")]
    [Required(ErrorMessage = "Preencha a senha.")]
    [DisplayName("Senha")]
    public string Senha { get; set; }

    [DisplayName("Confirmar Senha")]
    [Compare("Senha", ErrorMessage = "Senha e confirmação não são identicos.")]
    public string ConfirmaSenha { get; set; }

    //Relacionamentos
    public int NiveAcessolID { get; set; }
    public virtual NivelAcesso NivelAcesso { get; set; }

    public int CargoID { get; set; }
    public virtual CargoFuncionario Cargo { get; set; }

    public virtual ICollection<Pedido> Pedidos { get; set; }
}

2 answers

1

You are forgetting to import the following libraries System.Linq and System.Data.Entity. Add the code below to the top of your class:

using System.Linq;
using System.Data.Entity;

Updated

Note that, if you want, you can pass a string with the name of the property you want to give the include. For example:

public ActionResult Index()
{
    var pessoas = (Funcionario)db.Pessoas
                                 .Include("PessoaEndereco")
                                 .Include("Tipo")
                                 .Include("Cargo");

    return View(pessoas.ToList());
}

But I recommend giving the include’s through English expressions, because this way it is easy to map the impact points by changing a certain entity.

  • Thanks friend, already found the solution to my problem, I will post the answer.

  • Beauty! For nothing. = D

1


I solved my problem including the .Oftype< Funcionario>()

var pessoas = db.Pessoas.OfType<Funcionario>().Include(f => f.PessoaEndereco).Include(f => f.Tipo).Include(f => f.Cargo);

Browser other questions tagged

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