4 回答
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
TA贡献1794条经验 获得超8个赞
你可以使用Select()
。
string[] sStatList = sStatus.Split(','); var res = string.Join(",", sStatList.Select(s => $"'{s}'"));
这需要using System.Linq;
。
![?](http://img1.sycdn.imooc.com/545850ee0001798a02200220-100-100.jpg)
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 + ")";
![?](http://img1.sycdn.imooc.com/54584d560001571a02200220-100-100.jpg)
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 无论如何都会告诉您类型。
![?](http://img1.sycdn.imooc.com/5458464a00013eb602200220-100-100.jpg)
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 关注
- 289 浏览
添加回答
举报