[英]Join keys and values from 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, ...
你可以用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);
我们做的第一件事就是创建我们想要的项目的IEnumerable<String>
,然后我们使用string.Join
将IEnumerable组合成一个字符串。
编辑:
如果要更新到数据库,我建议删除此方法并尝试一些ORM库,如Entity Framework或NHibernate。 他们为您完成所有这些工作,使用对象更容易,而不用担心生成动态查询。
我能想到的最短的代码是
string res = string.Join("\n", g.Select(p => "K=" + p.Key + ",L=" + p.Value));
这导致了
K=K,L=k1
K=L,L=l1
您也可以在字典上使用扩展类。 这样运行相同但后来让你做一些简单的事情
g.ToKeyValueString("{0}=@{1}", ",");
助手班
internal static class DictionaryHelper
{
/// <summary>
/// Returns a string of key value pairs in the format k1=v1,k2=v2,...
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
/// <param name="dictionary"></param>
/// <returns></returns>
public static string ToKeyValueString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary)
{
return ToKeyValueString(dictionary, "{0}={1}", ",");
}
/// <summary>
/// Returns a string of key value paris in the format k1=v1{separator}kk2=v2...
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
/// <param name="dictionary"></param>
/// <param name="seperator">The string separator for the pairs</param>
/// <returns></returns>
public static string ToKeyValueString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, string seperator)
{
return ToKeyValueString(dictionary, "{0}={1}", seperator);
}
/// <summary>
/// Returns a string of key value pairs in the specified format with the specified separator
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
/// <param name="dictionary"></param>
/// <param name="format">The format string for the key value pairs</param>
/// <param name="separator">The string separator for the pairs</param>
/// <returns></returns>
public static string ToKeyValueString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, string format, string separator)
{
var pairs = dictionary.Select(c => string.Format(format, c.Key, c.Value));
return string.Join(separator, pairs);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.