0

を使用して SQL クエリを作成しようとしていますが、句StringBuilderの一部を実行しようとして行き詰まりました。WHERE

一連の値を含むリスト ボックスがあり、複数選択が可能です。IN選択したアイテムを繰り返し処理し、次のようなステートメントに入れる必要があります...

WHERE SOME_FIELD IN ('Value','NextValue','AnotherValue')

これまで私はこのようなコードを書いてきました...

if (lstSalesGroup.SelectedItem != null)
{
    selectQuery.Append("AND SALES_GROUP IN (");
    foreach (ListItem item in lstSalesGroup.Items)
    {
        if (item.Selected)
            selectQuery.Append("'" + item.Value + "',");
    }
    selectQuery.Append(")");
}

アイテムがループの最後であるかどうかをテストして、終了の「)」の前に「、」を付けないようにする必要があります。

これどうやってするの?または、クエリのこの部分を構築するためのより良い方法がある場合は、提案してください。私はまだ学んでいます。私たちは皆、どこかから始めなければなりません! :)

最終的には部品検索のクエリになります。

前もって感謝します

4

5 に答える 5

1

あなたはString.Joinいくつかで使うことができますLinq

わかりやすくするために、コードを変数に入れました。

if (lstSalesGroup.SelectedItem != null)
{
    var queryStr = "AND SALES_GROUP IN ({0})";
    var selectedItemValues = (from itm in lstSalesGroup.Items.Cast<ListItem>()
                              where itm.Selected
                              select String.Format("'{0}'", itm));
    selectQuery.Append(String.Format(queryStr, String.Join(",", selectedItemValues)));
}
于 2013-04-16T09:31:33.873 に答える
1

linq を使ってみる

selectQuery.Append("AND SALES_GROUP IN (");

selectQuery.Append(string.Join(",", lstSalesGroup.Items.Select(i => "'" + i.Value + "'")));    

selectQuery.Append(")");

これで問題は解決しますが、ここで SQL インジェクションに問題があります。クエリでパラメーターを使用することを強くお勧めします。

于 2013-04-16T09:33:23.503 に答える
0

これを試して:

if (lstSalesGroup.SelectedItem != null)
{
    selectQuery.Append("AND SALES_GROUP IN (");
    var local = lstSalesGroup.Items.Where(c => c.Selected)
                       .Select(c => "'"+c.Value+"'")
                       .Aggregate((c,n) => c+ ", "+n);

   selectQuery.Append(local);            
   selectQuery.Append(")");
}

メソッドの詳細については、この例を参照してください.Aggragate(...)

于 2013-04-16T09:30:31.607 に答える