none
¿Como cargo los datos de una consulta a mi vista? RRS feed

  • Pregunta

  • Me explico mejor, estoy trabajando con asp.net mvc, tengo en mi controlador una consulta que realizo, ya esta hecha, lo que no se es como pasar los datos obtenidos de mi consulta al @model de mi vista, es decir al model que tipo de elemento le debo de decir que es?

    Normalmente yo le pongo al model Miproyecto.Models.Cuenta, cuando lo hago de esta manera es porque tengo una clase definida pero en este caso no tengo ninguna clase definida y es una consulta con join

    var Historial = db.HistoriaReproduccion.GroupJoin(db.Peliculas, hr => hr.IdPelicula,
                    p => p.IdPeli, (hr, p) => new { p, hr }).Where(x => x.hr.IdUsuario == IdUs).ToList();

    en mi archivo cshtml que le debo de indicar al model para que me cargue los datos obtenidos de la consulta???

    viernes, 19 de mayo de 2017 23:30

Respuestas

  • Revisa la siguiente consulta LinQ:

    var Historial = db.Peliculas.Join(db.HistoriaReproduccion,
    			p => p.IdPeli,
    			hr => hr.IdPelicula,
    			(p, hr) => new
    			{
    				db.Peliculas = p,
    				db.HistoriaReproduccion = hr
    			})
    			.Where(x => x.HistoriaReproduccion.IdUsuario == IdUs)
    			.Select(x => new HistorialPeli()
    			{
    				IdHistorial = x.HistoriaReproduccion.IdHistorial,
    				IdUsuario = x.HistoriaReproduccion.IdUsuario,
    				Nombre = x.Peliculas.Nombre,
    				FechaReproduccion = x.HistoriaReproduccion.FechaReproduccion
    			});



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Fernando9401 sábado, 20 de mayo de 2017 22:19
    sábado, 20 de mayo de 2017 0:47

Todas las respuestas

  • Aquí es donde se rompe la idea de que las clases que corresponden al dominio podrían ser utilizadas por un método de acción para "tipar" la vista, como acabas de darte cuenta "en la vida real no es así", una vista no tiene por que ser la representación de una clase del modelo. ¿Entonces que hacer?, la M de MVC debe contener las clases que sirven de modelos ad-hoc para utilizar las vistas, las mismas podrían ser iguales, parcialmente iguales o la combinación de más de un modelo del dominio. Por cierto, ¿qué propiedades proyecta la consulta? ¿no te falta la lista de selección?

    Otra forma -que no la he probado aún, por tanto no puedo asegurarte nada- es que construyas consultas que retornen un tipo anónimo usando dynamic, aquí hay un enlace donde se trata al respecto: Incluir sólo un campo EF


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 20 de mayo de 2017 0:06
  • Bueno, realice una clases con los elementos que la consulta te debe de volver y si tienes razon me hace falta el select, la clase que construi es la siguiente:

    public class HistorialPeli
        {
            public int IdHistorial { get; set; }
            public int IdUsuario { get; set; }
            public string Nombre { get; set; }
            public DateTime FechaReproduccion { get; set; }
        }

    Modifique la consulta y ahora la tengo de la siguiente manera:

    var Historial = db.HistoriaReproduccion.Join(db.Peliculas, hr => hr.IdPelicula,
                    p => p.IdPeli, (hr, p) => new
                    {
                        IdUsu = hr.IdUsuario,
                        Id = hr.IdHistorial,
                        Pelicula = p.Nombre,
                        Fecha = hr.FechaReproduccion
                    }).Where(x=> x.IdUsu==IdUs);

    ahora he tratado de tiparla cambiando el var de la consulta por un List<HistorialPeli> el problema que me da ahora es que en la parte en donde empieza el where me da error y me tira el siguien mensaje: 

    Me gustaria poder tipar si me puedes ayudar con eso te lo agredeceria mucho 

    Soy nuevo utilizando asp.net mvc y aun no entiendo bien algunos conceptos 

    sábado, 20 de mayo de 2017 0:28
  • Revisa la siguiente consulta LinQ:

    var Historial = db.Peliculas.Join(db.HistoriaReproduccion,
    			p => p.IdPeli,
    			hr => hr.IdPelicula,
    			(p, hr) => new
    			{
    				db.Peliculas = p,
    				db.HistoriaReproduccion = hr
    			})
    			.Where(x => x.HistoriaReproduccion.IdUsuario == IdUs)
    			.Select(x => new HistorialPeli()
    			{
    				IdHistorial = x.HistoriaReproduccion.IdHistorial,
    				IdUsuario = x.HistoriaReproduccion.IdUsuario,
    				Nombre = x.Peliculas.Nombre,
    				FechaReproduccion = x.HistoriaReproduccion.FechaReproduccion
    			});



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Fernando9401 sábado, 20 de mayo de 2017 22:19
    sábado, 20 de mayo de 2017 0:47
  • Gracias por ayudarme a solucionar el programa me sirve mucho la nueva consulta que realizastes gracias

    :)

    sábado, 20 de mayo de 2017 22:20