Query Linq and see index

Asked

Viewed 185 times

6

He wanted a query in Latin that shows the attributes of the availability table and the name of the respective catechist that is in the person table. At index will appear:

 Nome | AnoPastoral | DiaDisponivel | HoraDisponivel | Observacoes

I’m having difficulties in the query and I don’t know how to show 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());
        }
  • I didn’t understand the difficulty of the display. The query performs correctly?

  • Yes I already tested the query with a breakpoint and is returning what I want but I do not know how to display in my View index.

  • @foreach (var item in Model) {&#xA; <tr>&#xA;&#xA; <th>&#xA; @Html.DisplayFor(????)&#xA; </th>

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; }
}

The 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());
    }

To 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>
  • There’s a bug in the compiler and I can’t fix it. Compiler error message: "CS1963: An expression tree may not contain a dynamic operation". the error is in the "item"..

  • Is because of the DisplayFor. Look now.

  • Still in trouble." 'Object' does not contain a definition for 'Name'".

  • Would it be a problem if you type this return? Creating a Viewmodel, for example?

  • It would be no problem. But I don’t know how it would be done.

  • @user10271 See now.

  • Thank you. Problem Solved

Show 2 more comments

Browser other questions tagged

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