我目前正在查询如下字典,
foreach (var instance in Dict)
{
X += $"(Description = '{instance.Key}') OR ";
}
我可以使用SelectMany
并准备字符串X
吗?我还需要消除最后的OR
吗?
Dict.SelectMany(p=>p.Key.....)
答案 0 :(得分:4)
只需使用string.Join
和Select
var result = string.Join(" OR ",dict.Keys.Select(x=> $"Description = '{x}'"));
其他资源
获取包含
Dictionary<TKey,TValue>
中的键的集合。
连接指定数组的元素或a的成员 集合,在每个元素之间使用指定的分隔符或 成员。
将序列的每个元素投影为新形式。
答案 1 :(得分:1)
mjwills提出了一个有趣的问题。如果这是SQL,那么就可以做到:
var sql = "description IN ('" + string.Join("','". dict.Keys) + ")";
最好这样做:
var sql = new SqlCommand(",,, description IN ('", connstr);
var p = 0;
foreach(string k in dict.Keys){
sql.CommandText += $"@p{p},";
sql.Parameters.AddWithValue($"@p{p++},", k);
}
sql.CommandText = sql.CommandText.TrimEnd(',') + ")";
有一些避免使用AddWithValue的原因(Google表示“我们可以停止使用addwithvalue了吗”),但这说明了一般技术-我们将参数名称动态串联到sql上,然后将这些参数添加到集合中。始终应优先于简单的字符串连接
存在其他将值数组传递到数据库的方法,具体取决于数据库供应商-如果您使用的是sqlserver,则可以查看表值参数,例如