public List<Cosa> Retrieve(int pageSize, int page, out long totalRows, string filtro, string filtro2 ) { List<Parameter> parametros = new List<Parameter>(); var db = new Db(); var sqlDataFields = " SELECT * "; var sqlScalarField = "SELECT COUNT(datakey) "; var sqlDataFrom = new StringBuilder(" FROM toomuchdata "); bool first = true; var parmList = new List<object>(); if(filtro!=null) { sqlDataFrom.AppendFormat(first ? " WHERE " : " AND "); sqlDataFrom.AppendFormat(" fielddata1 LIKE :fielddata1"); parmList.AddRange(new[] { ":fielddata1", filtro }); parametros.Add(new Parameter()); first = false; } if (filtro2 != null) { sqlDataFrom.AppendFormat(first ? " WHERE " : " AND "); sqlDataFrom.AppendFormat(" fielddata1 LIKE :fielddata2"); parmList.AddRange(new[] { ":fielddata2", filtro2 }); first = false; } //Se saca el scalar var sqlScalar = string.Format("{0}{1}", sqlScalarField, sqlDataFrom); var limit = " LIMIT " + pageSize + " OFFSET " + (page - 1); sqlDataFrom.Append(limit); totalRows = (long)db.Scalar(sqlScalar,parmList.ToArray()); return db.Read(string.Format("{0}{1}", sqlDataFields, sqlDataFrom), Make2, parmList.ToArray()).ToList(); }