titulo query power personalizada numeros nombre letras las filas eliminar condicional concatenar como columnas columna cambiar c# insert dataset

c# - query - ¿Cómo se inserta una columna en un conjunto de datos entre dos columnas existentes?



concatenar en power query (4)

Copie las dos primeras columnas en un nuevo conjunto de datos, luego agregue la tercera columna y agregue las columnas restantes.

Puede envolver eso en una función Insertar después de si es necesario.

Estoy tratando de insertar una columna en un DataSet existente usando C #.

Como ejemplo, tengo un DataSet definido de la siguiente manera:

DataSet ds = new DataSet(); ds.Tables.Add(new DataTable()); ds.Tables[0].Columns.Add("column_1", typeof(string)); ds.Tables[0].Columns.Add("column_2", typeof(int)); ds.Tables[0].Columns.Add("column_4", typeof(string));

más adelante en mi código, quiero insertar una columna entre la columna 2 y la columna 4.

Los DataSets tienen métodos para agregar una columna, pero parece que no puedo encontrar la mejor forma de insertar una.

Me gustaría escribir algo como lo siguiente ...

...Columns.InsertAfter("column_2", "column_3", typeof(string))

El resultado final debe ser un conjunto de datos que tenga una tabla con las siguientes columnas: column_1 column_2 column_3 column_4

en lugar de: column_1 column_2 column_4 column_3 que es lo que el método add me da

seguramente debe haber una manera de hacer algo como esto.

Editar ... Solo quiero aclarar qué estoy haciendo con el DataSet en función de algunos de los comentarios a continuación:

Obtengo un conjunto de datos de un procedimiento almacenado. Entonces, tengo que agregar columnas adicionales al conjunto de datos que luego se convierte en un documento de Excel. No tengo control sobre los datos devueltos por el proceso almacenado, así que tengo que agregar columnas después del hecho.


Puede usar el método DataColumn.SetOrdinal () para este propósito.

DataSet ds = new DataSet(); ds.Tables.Add(new DataTable()); ds.Tables[0].Columns.Add("column_1", typeof(string)); ds.Tables[0].Columns.Add("column_2", typeof(int)); ds.Tables[0].Columns.Add("column_4", typeof(string)); ds.Tables[0].Columns.Add("column_3", typeof(string)); //set column 3 to be before column 4 ds.Tables[0].Columns[3].SetOrdinal(2);


Usé su sugerencia para crear un método de extensión para DataSet''s DataColumnCollection:

public static void InsertAfter(this DataColumnCollection columns, DataColumn currentColumn, DataColumn newColumn) { if (!columns.Contains(currentColumn.ColumnName)) throw new ArgumentException(/** snip **/); columns.Add(newColumn); //add the new column after the current one columns[newColumn.ColumnName].SetOrdinal(currentColumn.Ordinal + 1); }

Ahora puedo escribir:

dt = ds.Tables[0]; dt.Columns.InsertAfter(dt.Columns["column_2"], new DataColumn("column_3"));


Basado en https://.com/a/17372008/492336 , uso SetOrdinal con IndexOf () para insertar la bar antes de foo :

table.Columns.Add("bar").SetOrdinal(table.Columns.IndexOf("foo"));

Para insertarlo después de foo simplemente agregue +1 :

table.Columns.Add("bar").SetOrdinal(table.Columns.IndexOf("foo")+1);