2011-06-13 36 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));