public IEnumerable <Pelicula> Recomendaciones(String nombre, int grado) { EntrecineModelContainer db = new EntrecineModelContainer(); Usuario cliente = db.UsuarioConjunto.First(u => u.Nombre == nombre); Func <Usuario, IEnumerable <Pelicula> > pelisQueVio = usuario => db.ReservaConjunto.Where(r => r.Usuario.Id == usuario.Id).Select(r => r.Sesion.Pelicula); Func <Usuario, int> nPelisEnComun = usuario => pelisQueVio(usuario).Intersect(pelisQueVio(cliente)).Count(); int i = -1; IEnumerable <Usuario> usuariosPosiblesOrdenados = db.UsuarioConjunto.Where(u => u.Id != cliente.Id).OrderByDescending(nPelisEnComun).TakeWhile(u => { i++; return(grado > i); }); if (usuariosPosiblesOrdenados.Count() == 0) { List <Pelicula> noMencionadas = new List <Pelicula>(); IEnumerable <int> mencionadas = pelisQueVio(cliente).Union(PelisMasVistas).Select(p => p.Id); foreach (Pelicula p in db.PeliculaConjunto) { if (!mencionadas.Contains(p.Id)) { noMencionadas.Add(p); } } return(noMencionadas.OrderBy(VecesVista)); } IEnumerable <Pelicula> recomendaciones = pelisQueVio(usuariosPosiblesOrdenados.First()).Where(p => !pelisQueVio(cliente).Contains(p)); return(recomendaciones.Count() == 0 ? Recomendaciones(nombre, grado + 1) : recomendaciones); }
public ActionResult Index() { EntrecineModelContainer db = new EntrecineModelContainer(); List<Pelicula> peliculas = db.PeliculaConjunto.OrderByDescending(x => x.Id).Take(4).ToList(); peliculas.Shuffle(); return View(peliculas); }
public static ActionResult ComprobarRegistrado(EntrecineModelContainer db, String name, ActionResult privilegiado, ActionResult erroneo) { Usuario user = db.UsuarioConjunto.FirstOrDefault(x => x.Login.Equals(name)); if (user != null && user.Rol >= 1) return privilegiado; else return erroneo; }
public IEnumerable<Pelicula> Recomendaciones(String nombre, int grado) { EntrecineModelContainer db = new EntrecineModelContainer(); Usuario cliente = db.UsuarioConjunto.First(u => u.Nombre == nombre); Func<Usuario, IEnumerable<Pelicula>> pelisQueVio = usuario => db.ReservaConjunto.Where(r => r.Usuario.Id == usuario.Id).Select(r => r.Sesion.Pelicula); Func<Usuario, int> nPelisEnComun = usuario => pelisQueVio(usuario).Intersect(pelisQueVio(cliente)).Count(); int i = -1; IEnumerable<Usuario> usuariosPosiblesOrdenados = db.UsuarioConjunto.Where(u => u.Id != cliente.Id).OrderByDescending(nPelisEnComun).TakeWhile(u => { i++; return grado > i; }); if (usuariosPosiblesOrdenados.Count() == 0) { List<Pelicula> noMencionadas = new List<Pelicula>(); IEnumerable<int> mencionadas = pelisQueVio(cliente).Union(PelisMasVistas).Select(p => p.Id); foreach (Pelicula p in db.PeliculaConjunto) if (!mencionadas.Contains(p.Id)) noMencionadas.Add(p); return noMencionadas.OrderBy(VecesVista); } IEnumerable<Pelicula> recomendaciones = pelisQueVio(usuariosPosiblesOrdenados.First()).Where(p => !pelisQueVio(cliente).Contains(p)); return recomendaciones.Count() == 0 ? Recomendaciones(nombre, grado + 1) : recomendaciones; }