Tengo un DataTable llamado dt1 que contiene muchos datos. Entre esos datos hay dos columnas llamadas "Nombre y Apellido" y "Edad". Deseo poner en otro DataTable los datos de todas las personas mayores de 18 años y que no sean Juan Perez ó Juan Pérez.
Los DataTables tienen una propiedad Select que acepta consultas tipo SQL para filtrar datos en función a los nombres de sus columnas. Si estos nombres contienen espacios se deben poner entre corchetes.
El código es el siguiente:
string query = @"([Nombre y Apellido] <> 'Juan Perez' or
[Nombre y Apellido] <> 'Juan Pérez') and Edad > 18";
DataTable dtFin = new DataTable();
DataRow[] miFiltro = dt1.Select(query);
if (miFiltro.Length > 0)
{
// primero añado las columnas con su respectivo nombre
for (int i = 0; i < miFiltro[0].Table.Columns.Count; i++)
dtFin.Columns.Add(miFiltro[0].Table.Columns[i].ColumnName);
// añado las filas
for (int i = 0; i < miFiltro.Count(); i++)
dtFin.Rows.Add(miFiltro[i]);
}
Pero al correr este código me tiraba una exceción del tipo "ArgumentException Esta fila ya pertenece a otra tabla".
Buscando en Internet, Pedro Hurtado me dió la solución. (yo no hice la pregunta, pero que es la solución, lo es :D)
El código correcto es:
string query = @"([Nombre y Apellido] <> 'Juan Perez' or
[Nombre y Apellido] <> 'Juan Pérez') and Edad > 18";
DataTable dtFin = new DataTable();
DataRow[] miFiltro = dt1.Select(query);
if (miFiltro.Length > 0)
{
// primero añado las columnas con su respectivo nombre
for (int i = 0; i < miFiltro[0].Table.Columns.Count; i++)
dtFin.Columns.Add(miFiltro[0].Table.Columns[i].ColumnName);
// añado las filas
for (int i = 0; i < miFiltro.Count(); i++)
dtFin.Rows.Add(miFiltro[i].ItemArray);
}
Faltaba ponerle la propiedad ItemArray al añadir los DataRows de miFiltro al DataTable dtFin.
No hay comentarios:
Publicar un comentario