从Dictionary中加入键和值

时间:2015-12-17 20:05:08

标签: c# dictionary

有没有办法快速(即不使用foreach)连接以下Dictionary

Dictionary<string, string> g = new Dictionary<string, string>();
g.Add("K", "k1");
g.Add("L", "l1");

"K=@K,L=@L"

如何获得此结果:"K=k1,L=l1"

我正在和String.Join玩一点,但这似乎没有我想要的。

一些背景知识:我有一个键/值对列表,我想要在我的数据库(...keys...) VALUES (...values...)中插入或更新记录...,key=value, ...

3 个答案:

答案 0 :(得分:5)

您可以使用LINQ轻松地完成此操作,它仍然使用foreach,因此它不会“更快”,但它应该易于阅读。

Dictionary<string, string> g = new Dictionary<string, string>();
g.Add("K", "k1");
g.Add("L", "l1");

var keys1 = g.Select(x=>String.Format("{0}=@{0}", x.Key));
var result1 = String.Join(",", keys1);
Console.WriteLine(result1);

var keys2 = g.Select(x=>String.Format("{0}={1}", x.Key, x.Value));
var result2 = String.Join(",", keys2);
Console.WriteLine(result2);

Run Code

我们做的第一件事是制作我们想要的IEnumerable<String>项,然后我们使用string.Join将IEnumerable合并为一个字符串。

修改
如果要更新到数据库,我建议删除此方法并尝试一些ORM库,如Entity Framework或NHibernate。他们为您完成所有这些工作,使用对象更容易,而不用担心生成动态查询。

答案 1 :(得分:1)

我能想到的最短代码是

string res = string.Join("\n", g.Select(p => "K=" + p.Key + ",L=" + p.Value));

这导致

K=K,L=k1
K=L,L=l1

答案 2 :(得分:1)

您也可以在字典上使用扩展类。这样运行相同,但后来让你做一些简单的事情,如

if(isset($_GET['bool1'])){$bool1=$_GET['bool1']}else{$bool1=0;}

助手类

g.ToKeyValueString("{0}=@{1}", ",");