using System; using System.Data; using Entidades; using Entidades.Admin; using Entidades.Dto; using Microsoft.EntityFrameworkCore; using Microsoft.Identity.Client; using Modelo; using MySql.Data.MySqlClient; public class RepositorioPropiedades: RepositorioBase { public IQueryable ListarPropiedades(){ FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public Propiedade? ObtenerPropiedadPorId(int Id) { var con = Context; Propiedade? prop = con.Propiedades.Include(x=>x.DnipropietarioNavigation).FirstOrDefault(x=>x.Id == Id); if (prop == null || prop.Id == 0) { return null; } return prop; } public bool AñadirPropiedad(Propiedade? prop) { if (prop == null) return false; var con = Context; if (string.IsNullOrEmpty(prop.Letra)) prop.Letra = "_"; var filasInsertadasParam = new MySqlParameter("@p_filas_insertadas", SqlDbType.Int) { Direction = ParameterDirection.Output }; // Ejecutar el procedimiento almacenado var row = con.Database.ExecuteSqlRaw( $""" CALL InsertarPropiedad(@p_ubicacion, @p_cant_habitaciones, @p_piso, @p_letra, @p_dni_propietario, @p_id_tipo_propiedad, @p_monto, @iddivisa, @p_filas_insertadas) """, new MySqlParameter("@p_ubicacion", prop.Ubicacion), new MySqlParameter("@p_cant_habitaciones", prop.Canthabitaciones), new MySqlParameter("@p_piso", prop.Piso), new MySqlParameter("@p_letra", prop.Letra), new MySqlParameter("@p_dni_propietario", prop.Dnipropietario), new MySqlParameter("@p_id_tipo_propiedad", prop.Idtipropiedad), new MySqlParameter("@p_monto",prop.Monto), new MySqlParameter("@iddivisa", prop.Iddivisa), filasInsertadasParam ); return (int)filasInsertadasParam.Value == 1? true: false; } public bool PatchPropiedad(Propiedade prop, long dni) { var con = Context; Propiedade? propi = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x=>x.Id == prop.Id); if (propi == null) return false; propi.Canthabitaciones = prop.Canthabitaciones; propi.Idtipropiedad = prop.Idtipropiedad; propi.Ubicacion = prop.Ubicacion; propi.Piso = prop.Piso; propi.Letra = prop.Letra; propi.Monto = prop.Monto; propi.Iddivisa = prop.Iddivisa; propi.IdServicios.Clear(); foreach(Servicio ser in prop.IdServicios) { var servi = con.Servicios.FirstOrDefault(x=>x.Id == ser.Id); if (servi == null) return false; propi.IdServicios.Add(servi); } GenerarLog(con, dni, $"Se modificó: {prop.Id}"); return Guardar(con); } public IQueryable ObtenerPropiedadesPorEmail(string email) { FormattableString sqlq = $""" SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN Clientes c ON c.dni = p.dnipropietario JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad LEFT JOIN Servicio_Propiedad ps ON ps.idPropiedad = p.id LEFT JOIN Servicios s ON s.Id = ps.idServicio WHERE c.email = {email} AND p.idestado = 1 GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedadesDeBajaPorEmail(string email) { FormattableString sqlq = $""" SELECT p.id, p.ubicacion as Ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion as Tipo, GROUP_CONCAT(IFNULL(s.descripcion, '') SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN Clientes c ON c.dni = p.dnipropietario JOIN TipoPropiedad tp ON tp.id = p.idtipropiedad LEFT JOIN Servicio_Propiedad ps ON ps.idPropiedad = p.id LEFT JOIN Servicios s ON s.Id = ps.idServicio WHERE c.email = {email} AND p.idestado = 3 GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public bool AñadirServicioAPropiedad(int idprop, List idserv){ var con = Context; Propiedade? prop = con.Propiedades.Find(idprop); if (prop == null) return false; foreach (int id in idserv) { Servicio? servicio = con.Servicios.Find(id); if (servicio == null) return false; prop.IdServicios.Add(servicio); } return Guardar(con); } public bool BajaPropiedad(int id, Cliente? cli) { if (cli == null) return false; var con = Context; Propiedade? prop = con.Propiedades.FirstOrDefault(x=>x.Id == id); if (prop == null) return false; if (prop.Dnipropietario != cli.Dni) return false; if(prop.Idestado == 1){ prop.Idestado = 3; }else{ prop.Idestado = 1; } GenerarLog(con, cli.Dni, $"Baja propiedad: {prop.Id}"); return Guardar(con); } public bool BajaPropiedad(int id, long dni) { var con = Context; Propiedade? prop = con.Propiedades.FirstOrDefault(x=>x.Id == id); if (prop == null||prop.Dnipropietario == 0) return false; prop.Idestado = prop.Idestado == 3 ? 1 : 3; GenerarLog(con, dni, $"Baja propiedad: {prop.Id}"); return Guardar(con); } public bool BajaServiciosAPropiedad(int idprop, List idserv, long dni) { var con = Context; Propiedade? prop = con.Propiedades.Include(x=>x.IdServicios).FirstOrDefault(x => x.Id == idprop); if (prop == null) return false; foreach (int id in idserv) { Servicio? servicio = con.Servicios.Find(id); if (servicio == null) return false; if (prop.IdServicios.Contains(servicio)){ prop.IdServicios.Remove(servicio); } } GenerarLog(con, dni, $"Baja servicios a propiedad: {prop.Id}"); return Guardar(con); } public IQueryable ObtenerPropiedesPorHabitaciones_Tipo_Servicios(int habitaciones, int tipo, string servicios) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {habitaciones} AND p.idtipropiedad = {tipo} AND EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitaciones_Tipo(int cantidadHabitaciones, int tipoPropiedad) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {cantidadHabitaciones} AND p.idtipropiedad = {tipoPropiedad} GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorServicios(string servicios) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitaciones(int cantidadHabitaciones) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {cantidadHabitaciones} GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorTipo(int tipoPropiedad) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.idtipropiedad = {tipoPropiedad} GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitaciones_Servicios(int cantidadHabitaciones, string servicios) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {cantidadHabitaciones} AND EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorTipo_Servicios(int tipoPropiedad, string servicios) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.idtipropiedad = {tipoPropiedad} AND EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id """; var ret = Context.Database.SqlQuery(sqlq); return ret; } public bool BajaPropiedades(string email) { var con = Context; try { IQueryable listprop = con.Propiedades.Where(x=>x.DnipropietarioNavigation.Email == email); foreach (var item in listprop) { item.Idestado = 3; } } catch { return false; } return Guardar(con); } public IQueryable ListarPropiedadesPorPagina(int pag) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = 1 JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Context.Database.SqlQuery(sqlq); return ret; } ///////////////ADMIN public IQueryable ListarPropiedadesPorPaginaAdmin(int pag) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitacionesPaginado(int cantidadHabitaciones, int pag) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {cantidadHabitaciones} GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorTipoPaginado(int tipoPropiedad, int pag) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.idtipropiedad = {tipoPropiedad} GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitaciones_TipoPaginado(int cantidadHabitaciones, int tipoPropiedad, int pag) { FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {cantidadHabitaciones} AND p.idtipropiedad = {tipoPropiedad} GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorServiciosPaginado(string servicios, int pag) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitaciones_Servicios_Paginado(int cantidadHabitaciones, string servicios, int pag) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {cantidadHabitaciones} AND EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorTipo_Servicios_Paginado(int tipoPropiedad, string servicios, int pag) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.idtipropiedad = {tipoPropiedad} AND EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public IQueryable ObtenerPropiedesPorHabitaciones_Tipo_Servicios_Paginado(int habitaciones, int tipo, string servicios, int pag) { string serviciosEscapados = string.Join(",", servicios.Split(',').Select(s => s.Trim())); FormattableString sqlq = $""" SELECT DISTINCT p.id, p.ubicacion, p.canthabitaciones, p.piso, p.letra, tp.descripcion AS Tipo, GROUP_CONCAT(DISTINCT s.descripcion SEPARATOR ', ') AS Servicios, p.monto as Monto, ep.descripcion AS Estado, p.iddivisa as Iddivisa FROM Propiedades p JOIN EstadoPropiedad ep ON p.idestado = ep.id JOIN TipoPropiedad tp ON p.idtipropiedad = tp.id JOIN Servicio_Propiedad sp on p.id =sp.idPropiedad JOIN Servicios s on sp.idServicio =s.id WHERE p.canthabitaciones = {habitaciones} AND p.idtipropiedad = {tipo} AND EXISTS ( SELECT 1 FROM Servicio_Propiedad sp2 JOIN Servicios s2 ON sp2.idServicio = s2.id WHERE sp2.idPropiedad = p.id AND FIND_IN_SET(s2.descripcion, {serviciosEscapados}) ) GROUP BY p.id LIMIT 10 OFFSET {pag*10} """; var ret = Singleton.Context.Database.SqlQuery(sqlq); return ret; } public int CuantasPaginas(int estado = 0) { var con = Context; double inter; int ret; if (estado == 0){ inter = con.Propiedades.Count()/10.0; } else { inter = con.Propiedades.Where(x=>x.Idestado == estado).Count(); } if (inter == 0.00) return 0; ret = (int)Math.Ceiling(inter); return ret; } public int CuantasPaginasBusqueda(int habitaciones, string servicios, int tipoPropiedad, int estado) { int registrosPorPagina = 10; var query = Context.Propiedades .Include(p => p.IdestadoNavigation) .Include(p => p.IdtipropiedadNavigation) .Include(p => p.IdServicios) .AsQueryable(); if (habitaciones > 0) { query = query.Where(p => p.Canthabitaciones == habitaciones); } if (estado > 0){ query = query.Where(x=>x.Idestado == estado); } if (tipoPropiedad > 0) { query = query.Where(p => p.Idtipropiedad == tipoPropiedad); } if (!string.IsNullOrWhiteSpace(servicios)) { var listaServicios = servicios.Split(',').Select(s => s.Trim()).ToList(); query = query.Where(p => p.IdServicios.Any(sp => listaServicios.Contains(sp.Descripcion))); } int totalRegistros = query.Distinct().Count(); return (int)Math.Ceiling((double)totalRegistros / registrosPorPagina); } }