Make a query in Linq and see in index

6

I wanted a linq query that shows the attributes of the availability table and the name of the respective catechist that is in the person table. In the index will appear:

 Nome | AnoPastoral | DiaDisponivel | HoraDisponivel | Observacoes

I'm having difficulty in the query and I do not know how to display it in the index.

Models:

public partial class Pessoa {    
    [Key]       
    public int PessoaID { get; set; }
    public String Nome { get; set; }
    public String Morada { get; set; }
    public String Localidade { get; set; }
    public String CodPostal { get; set; }
    public String Telemovel { get; set; }
    public virtual Catequista Catequista { get; set; }
}

public partial class Catequista {

    //chave primária e chave forasteira
    [Key, ForeignKey("Pessoa")]
    public int CatequistaID { get; set; }
    public String Formacao_Eclisiastica { get; set; }  
    public String Catecismo_Pretendido { get; set; }
    public String Data_Inicio_Atividade { get; set; }
    public String ParoquiaInicioAtividade { get; set; }

    // referencia os dados da 'pessoa' associada ao catequista
    public virtual Pessoa Pessoa { get; set; }
}    
public partial class Disponibilidade {

        //chave primária
        public int DisponibilidadeID { get; set; }
        public String AnoPastoral { get; set; }
        public String DiaDisponivel { get; set; }
        public String HoraDisponivel { get; set; }
        public String Observacoes { get; set; }
        //chave estrangeira
        public int CatequistaID { get; set; }
        [ForeignKey("CatequistaID")]

        public virtual Catequista Catequista { get; set; }
    }

Controller:

   public ActionResult Index()
        {
            var disponibilidade = (from d in db.Disponibilidade
                                   join c in db.Catequista on d.CatequistaID equals c.CatequistaID
                                   join p in db.Pessoa on c.CatequistaID equals p.PessoaID
                                   where c.CatequistaID == d.CatequistaID
                                   select new { Nome = p.Nome, AnoPastoral = d.AnoPastoral, DiaDisponivel = d.DiaDisponivel, HoraDisponivel = d.HoraDisponivel, Observacoes = d.Observacoes });                                
            return View(disponibilidade.ToList());
        }
    
asked by anonymous 14.12.2015 / 13:24

1 answer

2

I think the sentence is right. I just consider that we need to type the return object:

public class DisponibilidadeViewModel
{
    // Não sei os tipos das suas variáveis, então vou colocar tudo String.
    // Fique à vontade pra definir os tipos corretos.
    public String Nome { get; set; }
    public String AnoPastoral { get; set; }
    public String DiaDisponivel { get; set; }
    public String HoraDisponivel { get; set; }
    public String Observacoes { get; set; }
}

Controller would look like this:

    public ActionResult Index()
    {
        var disponibilidade = (from d in db.Disponibilidade
                               join c in db.Catequista on d.CatequistaID equals c.CatequistaID
                               join p in db.Pessoa on c.CatequistaID equals p.PessoaID
                               where c.CatequistaID == d.CatequistaID
                               select new DisponibilidadeViewModel { Nome = p.Nome, AnoPastoral = d.AnoPastoral, DiaDisponivel = d.DiaDisponivel, HoraDisponivel = d.HoraDisponivel, Observacoes = d.Observacoes });                                
        return View(disponibilidade.ToList());
    }

View would look like this:

@model IEnumerable<MeuProjeto.ViewModels.DisponibilidadeViewModel>

<table>
    <thead>
        <tr>
            <th>Nome</th>
            <th>Ano Pastoral</th>
            <th>Dia Disponível</th>
            <th>Hora Disponível</th>
            <th>Observações</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model) 
        { 
            <tr> 
                <td>@item.Nome</td>
                <td>@item.AnoPastoral</td>
                <td>@item.DiaDisponivel</td>
                <td>@item.HoraDisponivel</td>
                <td>@item.Observacoes</td>
            </tr>
        }
    </tbody>
</table>
    
14.12.2015 / 16:39