有没有办法将SelectMany用于字典

时间:2019-03-21 05:58:41

标签: c#

我目前正在查询如下字典,

foreach (var instance in Dict)
{
   X += $"(Description = '{instance.Key}') OR ";
}

我可以使用SelectMany并准备字符串X吗?我还需要消除最后的OR吗?

Dict.SelectMany(p=>p.Key.....) 

2 个答案:

答案 0 :(得分:4)

只需使用string.JoinSelect

var result = string.Join(" OR ",dict.Keys.Select(x=> $"Description = '{x}'"));

Full Demo Here


其他资源

Dictionary.Keys Property

  

获取包含Dictionary<TKey,TValue>中的键的集合。

String.Join Method

  

连接指定数组的元素或a的成员   集合,在每个元素之间使用指定的分隔符或   成员。

Enumerable.Select Method

  

将序列的每个元素投影为新形式。

答案 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,则可以查看表值参数,例如