2010-08-13 9 views
5

Tengo un diccionario (vea a continuación) que tiene cadenas de claves y cadenas de valores y deseo poder unir este diccionario a mi tabla de datos utilizando la clave del diccionario (el campo único equivalente en la tabla de datos es llamado Network_ID). ¿Cómo puedo hacer esto? Espero una nueva tabla de datos que tenga la información de tabla de datos original, así como dos columnas adicionales de datos (clave y valor del diccionario). Muchas gracias.Uniendo un diccionario a una tabla de datos

Mi diccionario es de este tipo: Dictionary<string, string> input = new Dictionary<string, string>();

Editado:

  dt.Columns.Add("Key"); 
     dt.Columns.Add("KeyValue"); 

     foreach (System.Data.DataRow row in dt.Rows) 
     { 
      var networkID = (string)row["Network_ID"]; 

      if(input.ContainsKey(networkID)) 
      { 
       row["Key"] = networkID.ToString(); 
       row["KeyValue"] = input.Values.ToString(); 
      } 

     } 

Respuesta

1

Puede lograr esto agregando dos columnas a su tabla de datos y recorriendo las filas para completarlas.

foreach (DataRow row in table.Rows) 
{ 
    var networkID = (string)row["Network_ID"]; 
    if (input.ContainsKey(networkID)) 
    { 
     row["NewKeyColumn"] = networkID; 
     row["NewKeyValue"] = input[networkID] 
    } 
} 

Como los accesos al diccionario se amortizan O (1), la combinación total tiene un rendimiento lineal.

+0

Hola kbrimington Tomé sus sugerencias e hice algunos cambios, pero después los cambios se realizan en mi tabla de datos y trato de imprimir cada columna y fila en un archivo de texto; mis otras columnas de datos salen bien, pero las nuevas columnas no muestran datos legibles. Justo lo que ve a continuación System.Collections.Generic.Dictionary'2 + ValueCollection [System.String, System.String] – Josh

+0

No importa, creo que lo tengo ahora. Gracias – Josh

0

Por lo que yo sé, en el supuesto de que está utilizando la clase DataTable, no se puede unirse a un diccionario en su objeto.

Se puede crear un nuevo DataTable (dentro de un DataSet) y transferir el contenido del diccionario en la nueva tabla, se podría añadir nuevas columnas a la DataTable o usted podría, si lo haría por aplicable a su situación, utilice una Consulta LINQ y una combinación dentro de la consulta LINQ para crear un tipo anónimo (o puede crear un tipo nuevo que represente los datos combinados) y combinar y usar los datos de esa manera.

Debe tener en cuenta que nada de esto podrá regresar a la base de datos si necesita que se mantenga esta información. Todo esto sería transitorio dentro de su aplicación.

2

Es bastante fácil (con LINQ), aunque el resultado no será un DataTable sino un IEnumerable de una nueva clase anónima.

 var result = from myDataRow in myDataTable.AsEnumerable() 
        join myKeyValuePair in myDictionary 
        on myDataRow.Field("Network_ID") equals myKeyValuePair.Key 
        select new { 
         NetworkID = myDataRow.Field("Network_ID"), 
         ... /* other DataTable row values here */, 
         DictionaryKey = myKeyValuePair.Key, 
         DictionaryValue = myKeyValuePair.Value 
        }; 

espero que si te va :) Si necesita una tabla de datos, usted tiene que crear una nueva desde el result de esta consulta LINQ.

0

algo similar:

var result = dt.AsEnumerable() 
       .Join(id2itm.Keys, 
         row => row[idScColIdx], 
         id => id, 
         (row, id) => row) 
       .Each(ro => {ro[idClmName] = FlagChar; 
          ro[idColorClmName] = FlagColor;}); 

Mi Cada() es un método de extensión, se puede usar puro código:

var result = dt.AsEnumerable() 
       .Join(id2itm.Keys, 
         row => row[idScColIdx], 
         id => id, 
         (row, id) => row); 

foreach (var ro in result) 
{ 
       ro[idClmName] = FlagChar; 
       ro[idColorClmName] = FlagColor;}); 
} 
Cuestiones relacionadas