4 回答

TA貢獻1794條經驗 獲得超8個贊
你可以使用Select()
。
string[] sStatList = sStatus.Split(','); var res = string.Join(",", sStatList.Select(s => $"'{s}'"));
這需要using System.Linq;
。

TA貢獻1839條經驗 獲得超15個贊
試試這個:
string[] sStatList = sStatus.Split(',');
string sFilter= "";
foreach (string p in sStatList)
{
sFilter = sFilter+ ("'" + p + "',");
}
if(sFilter.EndsWith(","))
{
sFilter = sFilter.Substring(0,sFilter.Length-1);
}
sFilter = " AND STAT IN (" + sFilter + ")";

TA貢獻1802條經驗 獲得超10個贊
您可以使用string.Join這樣的:
var status = "10,20,30,40";
if (!string.IsNullOrEmpty(status))
{
var sStatList = status.Split(',');
filter = $"'{string.Join("','", sStatList)}'";
}
您的另一個選擇是使用string.Replace:
var status = "10,20,30,40";
filter = $"'{status.Replace(",","','")}'";
無論哪種方式,您都需要驗證輸入以避免SQL 注入??紤]以下:
status = "10,20,30');/*,*/ DROP TABLE Users;//";
例如Dapper直接支持這個:}
var sql = "SELECT * FROM table WHERE Id IN @ids"
var results = connection.Query(sql, status.Split(','));
并且有替代的 orms 可以處理參數化。
作為旁注:避免在 C# 中使用匈牙利表示法,因為微軟也建議. 您使用前綴指定變量類型的匈牙利表示法是無用的信息并且會增加噪音,尤其是 VS 和 VS Code 無論如何都會告訴您類型。

TA貢獻2051條經驗 獲得超10個贊
@oika 的回答是在正確的軌道上,但它不太適合你正在嘗試做的事情。然而Select這里的答案是......雖然這樣:
您需要添加對以下內容的引用Linq:
using System.Linq;
然后
var sStatuses = sStatus.Split(',');
var parsedsStatuses = string.Join(",", sStatuses.Select(x => $"'{x}'"));
var sql = $"AND STAT IN ({ parsedsStatuses })";
當然,您在執行此操作時要小心,因為它會為SQL Injection.
- 4 回答
- 0 關注
- 399 瀏覽
添加回答
舉報