sql >> Base de Datos >  >> RDS >> Sqlserver

Seleccione la consulta con la condición Where dependiendo de los valores de la lista en asp.net

Aquí hay una solución sin un for bucle, pero desafortunadamente también sin una instrucción SQL parametrizada:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

public class test {
  public static void Main(string[] args)
  {
    //List<int> listColumns = new List<int>(){ 1, 5, 6, 9};
    System.Collections.Generic.List<int> listColumns = new System.Collections.Generic.List<int>(){ 1, 5, 6, 9};
    string s = String.Join(", ", listColumns.Select(x => x.ToString()));

    string sql = String.Format("SELECT * FROM Table WHERE ID IN ({0})", s);
    Console.WriteLine(sql);
  }
}

Tenga en cuenta que al usar select * se considera una mala práctica

editar Aquí hay un código nuevo porque su lista es del tipo System.Web.UI.MobileControls.List

string sql = String.Format("SELECT * FROM Table WHERE ID IN ({0})", 
                 listColumns.ListItem.Value);

editar 2 He tomado el código de tu comentario:

list.Items.Clear(); 
string values = DropDownList4.SelectedValue; 
string[] words = values.Split(','); 

foreach (string s in words) 
    if (s != "" && s != string.Empty && s != null)     
        list.Items.Add(s);

¿Supongo que tienes esto en el evento de cambio desplegable o algo así? y su menú desplegable tiene una cadena como "1,5,6,9" en el valor. Si todas mis suposiciones son correctas, puede usar:

System.Collections.Generic.List<int> selectedValues = new     System.Collections.Generic.List<int>();

foreach (string s in words)
    if (!String.IsNullOrWhiteSpace(s))
        selectedValues.Add(Convert.ToInt32(s));
string ids = String.Join(", ", selectedValues.Select(x => x.ToString()));
string sql = String.Format("SELECT * FROM Table WHERE ID IN ({0})", ids);