2011-06-13 21 views
5

estoy tratando de crear una cadena compuesta de una tecla seguida de su valor, de modo que la cadena se ve algo como:Cómo concatenar claves con valores?

clave, valor, clave, valor, clave, valor

Así Hasta ahora he intentado utilizar concat:

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

... pero esto no parece producir lo que quiero.

Tanto Keys y Values son Dictionary<string, object>

Respuesta

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

¿Cómo puedo modificar esto para manejar un diccionario vacío? Dividir la selección del agregado? –

+0

Si está vacío, simplemente no hagas nada: 'string result = list.Count> 0? List.Select (w => w.Key +"; "+ w.Value) .Aggregate ((c, n) => c + "," + n): ""; ' – Blindy

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

creo (no probado).

+0

@ -1, ¿qué hice mal? –

2

lo haría así:

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))) 
); 

del diccionario seleccione un enumerable de cuerda y luego unirse a la lista de ,.

Salida: key;value,key2;value2

1

Además de los mencionados anteriormente:

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

también puede probar la sencilla para el bucle sin utilizar LINQ:

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

o podemos utilizar .NET 4 característica de String.Join:

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