//--------------------------------------------------------------------------------------------------------------------------------------- /// <summary> Obtiene una lista de coches de acuerdo a los firtros definidos en 'datos' (Marca, Modelo o Motor) </summary> public List <CocheDescFull> FullDesc(string datos) { var Items = new List <CocheDescFull>(); var parms = new ItemsFilters(datos, HttpCtx); if (parms.Marca.Id < 0 || parms.Modelo.Id < 0 || parms.Motor.Id < 0) { return(Items); } var pass1 = DbCtx.Coches; var pass2 = parms.Marca.Id > 0? pass1.Where(c => c.Marca == parms.Marca.Id) : pass1; var pass3 = parms.Modelo.Id > 0? pass2.Where(c => c.Modelo == parms.Modelo.Id) : pass2; var pass4 = parms.Motor.Id > 0? pass3.Where(c => c.Motor == parms.Motor.Id) : pass3; var coches = pass4.Include(c => c.MarcaNavigation).Include(c => c.ModeloNavigation).Include(c => c.MotorNavigation); foreach (var coche in coches) { Items.Add(new CocheDescFull(coche)); } return(Items); }
//--------------------------------------------------------------------------------------------------------------------------------------- /// <summary> Obtiene la lista de Items que satiface los parametros especificados </summary> public Recambios FindByDatos(string datos) { Filters = new ItemsFilters(datos, HttpCtx); if (!ValidateFilters()) { return(this); // Si hay algún filtro no valido, no retorna ningún registro } string sSelect = $"SELECT DISTINCT I.Id, I.Fabricante, I.Categoria, I.Nombre, I.Codigo, I.Foto, I.Precio, I.Descripcion"; var hasCoche = Filters.Marca.Id > 0 || Filters.Modelo.Id > 0 || Filters.Motor.Id > 0; // Si hay que tener en cuenta el coche var sTable = hasCoche? "Item AS I INNER JOIN ItemCoche AS IC ON I.Id = IC.IdItem INNER JOIN Coche AS C ON IC.IdCoche = C.Id" : "Item AS I"; StringBuilder sWhere = new StringBuilder(""); if (hasCoche || Filters.Categoria.Id > 0 || Filters.Fabricante.Id > 0) // Si hay algun tipo de filtro { var sep = ""; sWhere.Append("WHERE "); if (Filters.Marca.Id > 0) { sWhere.Append($"C.Marca = {Filters.Marca.Id}"); sep = " AND "; } // Filtra por la marca de coche if (Filters.Modelo.Id > 0) { sWhere.Append($"{sep}C.Modelo = {Filters.Modelo.Id}"); sep = " AND "; } // Filtra por el modelo del coche if (Filters.Motor.Id > 0) { sWhere.Append($"{sep}C.Motor = {Filters.Motor.Id}"); sep = " AND "; } // Filtra por el motor del coche if (Filters.Categoria.Id > 0) { sWhere.Append($"{sep}I.Categoria = {Filters.Categoria.Id}"); sep = " AND "; } // Filtra por la categoria de la pieza if (Filters.Fabricante.Id > 0) { sWhere.Append($"{sep}I.Fabricante = {Filters.Fabricante.Id}"); } // Filtra por el fabricante de la pieza } string sOrder = $"ORDER BY {getOrderField()} OFFSET {Filters.RegFirst} ROWS FETCH NEXT {Filters.RegCount} ROWS ONLY"; // Ordena y limita los recambios devueltos Items = DbCtx.Items.FromSqlRaw($"{sSelect} FROM {sTable} {sWhere} {sOrder}").ToList(); // Ejecuta la secuencia SQL if (Filters.RegFirst == 0) // Si la primera página { Count = DbCtx.Items.FromSqlRaw($"{sSelect} FROM {sTable} {sWhere}").Count(); // Calcula la cantidad de registros } return(this); }
//--------------------------------------------------------------------------------------------------------------------------------------- /// <summary> Obtiene la lista de Items que contengan la cadena 'name' dentro de su nombre </summary> internal Recambios FindByName(string name, string datos) { Filters = new ItemsFilters(datos, HttpCtx); string sSelect = $"SELECT DISTINCT * FROM Item WHERE (CHARINDEX('{name}', Nombre) > 0) "; string sOrder = $"ORDER BY {getOrderField()} OFFSET {Filters.RegFirst} ROWS FETCH NEXT {Filters.RegCount} ROWS ONLY"; // Ordena y limita los recambios devueltos Items = DbCtx.Items.FromSqlRaw(sSelect + sOrder).ToList(); // Ejecuta la secuencia SQL if (Filters.RegFirst == 0) // Si la primera página { Count = DbCtx.Items.FromSqlRaw(sSelect).Count(); // Calcula la cantidad de registros } return(this); }