List names in a query and send to a ViewModel

1

I wanted to list the names belonging to a group and send them to a ViewModel and be collected by a View (details). Problem:

  

'IQueryable' does not contain a definition for   'NameCategory' and in the extension method 'NameCategory'   accepting the first argument of type 'IQueryable' could   be found (are you missing a using directive or an assembly reference?)

Controller:

 public ActionResult Detalhes(int? id)
        {
            var grupo = db.Grupo.Where(g => g.GrupoID ==id).FirstOrDefault();

            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            //query para recolher as nomes dos catequizandos pertencentes ao grupo selecionado
            var queryNomeCatequizandos = (from g in db.Grupo
                                          join i in db.Inscricao on g.GrupoID equals i.GrupoID
                                          join c in db.Catequizando on i.CatequizandoID equals c.CatequizandoID
                                          join p in db.Pessoa on c.CatequizandoID equals p.PessoaID
                                          where g.GrupoID == i.GrupoID && i.CatequizandoID == c.CatequizandoID && c.CatequizandoID == p.PessoaID && g.GrupoID == id
                                          select new GrupoViewModel
                                          {
                                              NomeCatequizando = p.Nome,                                                                                  
                                          });



            if (queryNomeCatequizandos == null)
            {
                return HttpNotFound();
            }

            GrupoViewModel model = new GrupoViewModel()
            {
                GrupoID = grupo.GrupoID,
                NomeCatequizando = queryNomeCatequizandos.NomeCatequizando,
            };


            return View(grupo);
        }

ViewModel:

public class GrupoViewModel
    {
        public int GrupoID { get; set; }
        public String AnoPastoral { get; set; }
        public String HoraInicio { get; set; }
        public String DiaSessao { get; set; }
        public String AnoCatequese { get; set; }
        public String LetraGrupo { get; set; }
        public String Sala { get; set; }
        public String Observacoes { get; set; }
        public String NomeCatequizando { get; set; }

    }

There is a problem: Template inscription

  

public int? GroupID {get; set; }

Controller error:

GrupoID = i.GrupoID,

Error:

  

Can not implicitly convert type 'int?' to 'int'. An explicit conversion   is there a missing cast?

    
asked by anonymous 07.01.2016 / 16:35

1 answer

4

Your approach is not correct. The right thing would be:

var queryNomeCatequizandos = (from g in db.Grupo
                              join i in db.Inscricao on g.GrupoID equals i.GrupoID
                              join c in db.Catequizando on i.CatequizandoID equals c.CatequizandoID
                              join p in db.Pessoa on c.CatequizandoID equals p.PessoaID
                              where g.GrupoID == i.GrupoID && i.CatequizandoID == c.CatequizandoID && c.CatequizandoID == p.PessoaID && g.GrupoID == id
                              select new GrupoViewModel
                              {
                                  GrupoID = i.GrupoID,
                                  NomeCatequizando = p.Nome
                              });

The return would be:

return View(queryNomeCatequizandos.ToList());

This here you can remove:

        GrupoViewModel model = new GrupoViewModel()
        {
            GrupoID = grupo.GrupoID,
            NomeCatequizando = queryNomeCatequizandos.NomeCatequizando,
        };

View would have something like:

@model IEnumerable<MeuProjeto.ViewModels.GrupoViewModel>

And the listing:

@foreach (var grupo in Model) { ... }

Pro null group problem, do the following:

var queryNomeCatequizandos = (from g in db.Grupo
                              join i in db.Inscricao on g.GrupoID equals i.GrupoID
                              join c in db.Catequizando on i.CatequizandoID equals c.CatequizandoID
                              join p in db.Pessoa on c.CatequizandoID equals p.PessoaID
                              where g.GrupoID == i.GrupoID && i.CatequizandoID == c.CatequizandoID && c.CatequizandoID == p.PessoaID && g.GrupoID == id
                              select new GrupoViewModel
                              {
                                  GrupoID = i.GrupoID ?? 0,
                                  NomeCatequizando = p.Nome
                              });
    
07.01.2016 / 16:39