2011-06-13 57 views
5

我试图创建一个键,然后按它的价值,组成的字符串,该字符串看起来像:如何连接键与值?

键,值,键,值,键;价值

所以远我试图使用concat:

var originalKeyValues = entity.ChangeTracker.OriginalValues.Keys.Concat(
    entity.ChangeTracker.OriginalValues.Values).ToString(); 

...但这似乎并没有产生我想要的。

两个KeysValuesDictionary<string, object>

回答

6
string result=list.Select(w=>w.Key+";"+w.Value).Aggregate((c,n)=>c+","+n); 
+0

我将如何修改这个来处理空字典。从聚合中拆分出选择? – 2011-06-13 13:51:21

+0

如果它是空的,就不要做任何事情:'string result = list.Count> 0?list.Select(w => w.Key +“;”+ w.Value).Aggregate((c,n)=> C + “ ”+ N):“,”;' – Blindy 2011-06-13 14:49:48

1
var originalKeyValues = entity.ChangeTracker.OriginalValues 
    .Select(OV => OV.Key + ";" + OV.Value) 
    .Aggregate((acc, next) => acc + "," + next)); 

我认为(未经测试)。

+0

@ -1,我弄错了什么? – 2011-06-13 13:34:14

2

我会做这样的:

var x = new Dictionary<string, string> { { "key", "value" }, { "key2", "value2" } }; 

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

从字典中选择字符串的枚举然后通过,加入列表。

输出:key;value,key2;value2

1

除了上面提到的那些:

result = (from a in list select a.Key + ";" + a.Value).Aggregate((current, next) => current + "," + next); 

,我们也可以尝试简单的for循环,而无需使用LINQ:

foreach (KeyValuePair<String, String> a in list) 
      result += a.Key + ";" + a.Value + ","; 

或者,我们可以使用.NET 4功能String.Join

result = String.Join(",", (from a in list select a.Key + ";" + a.Value));