sql >> データベース >  >> RDS >> Sqlserver

asp.netのリスト値に応じて、Where条件でクエリを選択します

    for なしのソリューションは次のとおりです。 ループしますが、残念ながらパラメータ化された SQL ステートメントもありません:

    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);
      }
    }
    

    select * を使用することに注意してください 悪い習慣と見なされます

    編集 リストのタイプが System.Web.UI.MobileControls.List であるため、ここにいくつかの新しいコードがあります

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

    編集 2 あなたのコメントからコードを取得しました:

    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);
    

    ドロップダウンの変更イベントか何かでこれを持っていると思いますか?ドロップダウンの値には「1,5,6,9」のような文字列があります。私の仮定がすべて正しければ、以下を使用できます:

    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);
    


    1. Spring Boot、PostgreSQL、Docker-コンテナでの実行中に接続が拒否されました

    2. Oracle:2つの日付間のHH:MM:SSの時間差を計算します

    3. SQL で Order by に Where 句を適用する

    4. SQLServer2008の垂直方向のデータから水平方向へ