Database query in C # mvc

3

How is the syntax or how do I convert a multi-joins query to a search in my application in C # asp.net mvc? Example: I have a form with the following controller

        public ActionResult Pesquisa(int id = 0)
    {

        var resultado = context.Graduacoes.Include(e => e.Cursos).Where(e => e.Id == id).ToList();

        ViewBag.Graduacoes = new SelectList(db.Graduacoes, "Id", "Nome");

      return View(resultado);
    }

I need the user to select the graduation from the list and click on 'Search' to return the name and other information of the individuals that have that graduation. In the bank I would do so:

select e.Id, c.Nome from Curso c
inner join Escolaridade e 
on e.Id = NívelId

Models

    public class Graduacao
{
    public int Id { get; set; }

    [Required(ErrorMessage = "O Nome é obrigatório.")]
    [StringLength(50, ErrorMessage = "O nome pode ter no máximo 50 caracteres.")]
    public string Nome { get; set; }

    [Range(0, 20, ErrorMessage="O Nível deve ser um número positivo até 20.")]
    public int Nível { get; set; }

    public virtual ICollection<Curso> Cursos { get; set; }
}

    public class Curso
{
    public int Id { get; set; }

    [Required(ErrorMessage = "O Nome é obrigatório.")]
    [StringLength(50, ErrorMessage = "O Nome pode ter no máximo 50 caracteres.")]
    public string Nome { get; set; }

    [Required(ErrorMessage = "A Instituição é obrigatória.")]
    [StringLength(50, ErrorMessage = "A Instituição pode ter no máximo 50 caracteres.")]
    public string Instituição { get; set; }

    [Required(ErrorMessage = "O Nível do curso é obrigatório.")]
    public int? NívelId { get; set; }
    public virtual Escolaridade Nível { get; set; }

View

@model IEnumerable<Competências.Models.Graduacao>

<title>Pesquisa por Graduação </title>

<div> 
     @using (Html.BeginForm())
     {

    <div class="form-group">

        @Html.DropDownList("Graduacoes")

    </div>

    <button type="submit" id="pesquisar" class="btn btn-primary btn-xs">Buscar</button>
     }
</div>
<div>
<table>

    @{
        if (Model != null)
        {
            foreach (var item in Model)
            {
        <tr>
        <th>Nome </th>

    </tr>
                <tr>
                      <td width="30%">@item.Nome</td> 

           </tr>

            }
        }
    }
</table>
    </div>

I wanted here, when choosing a graduation for example "High School" I return the name of all the courses registered with high school. I want to return more things, but I summed up for that.

    
asked by anonymous 30.06.2014 / 22:20

1 answer

2
  

Warning: This response was developed from what the author of the question mentioned. Any redundancy or odd detail that may appear is due to the various issues that this response had.

I'm assuming you have a mapping like this in your application:

public class Graduacao
{
    [Key]
    public int GraduacaoId { get; set; }

    public virtual ICollection<Curso> Cursos { get; set; }
}

public class Curso
{
    [Key]
    public int CursoId { get; set; }
    public int PerfilId { get; set; }
    public int GraduacaoId { get; set; }

    public virtual Perfil Perfil { get; set; }
    public virtual Graduacao Graduacao { get; set; }
}

public class Perfil
{
    [Key]
    public int PerfilId { get; set; }

    public virtual ICollection<Curso> Cursos { get; set; }
}

So, a basic% wrapper would look like this:

public ActionResult Index(int id) 
{
    var resultados = context.Graduacoes
                        .Include(g => g.Cursos)
                        .Where(g => g.GraduacaoId == id).ToList();

    ViewBag.Graduacao = new SelectList(db.Graduacao, "Id", "Nome");

    return View(resultados);
}

select must be loaded by lazy loading, which is done automatically by the Entity Framework.

EDIT

Change your Perfil to:

public ActionResult Index() 
{
    ViewBag.Graduacao = new SelectList(db.Graduacao, "Id", "Nome");

    return View();
}

[HttpPost]
public ActionResult Pesquisa(int id) 
{
    var resultados = context.Graduacoes
                        .Include(g => g.Cursos)
                        .Where(g => g.GraduacaoId == id).ToList();

    ViewBag.Graduacao = new SelectList(db.Graduacao, "Id", "Nome");

    return View("Index", resultados);
}

View:

<div> 
     @using (Html.BeginForm("Pesquisa", "Graduacoes"))
     {

         <div class="form-group">
             @Html.DropDownList("Graduacoes")

         </div>

         <button type="submit" id="pesquisar" class="btn btn-primary btn-xs">Buscar</button>
     }
</div>
    
30.06.2014 / 22:31