2011-05-16 143 views
6

tengo una DataTable con algunas filas, una de ellas es una ID (una cadena) y un System.DateTime. las otras filas no son importantes ahora.¿cómo borrar filas de DataTable en C# con un filtro?

ahora quiero eliminar todas las filas con el mismo ID que tienen un DateTime anterior como el más nuevo.

¿Esto es posible?

aquí un ejemplo

  • ID: 123 Fecha: 24.12.2010 ...
  • ID: 123 Fecha: 23.12.2010 ...
  • ID: 123 Fecha: 22.12.2010. ..

después de esto yo sólo quiero:

  • ID: 123 Fecha: 24.12.2010 ...

Respuesta

7

probar la próxima

public void DeleteOldById(DataTable table, int id) 
{ 
     var rows = table.Rows.Cast<DataRow>().Where(x => (int)x["ID"] == id); 
     DateTime specifyDate = rows.Max(x => (DateTime)x["Date"]) 

     rows.Where(x =>(DateTime)x["Date"] < specifyDate).ToList(). 
      ForEach(x => x.Delete()); 
} 


public void DeleteAllOldRows(DataTable table) 
{ 
    var ids = table.Rows.Cast<DataRow>().Select(x => (int)x["ID"]).Distinct(); 
    foreach(int id in ids) 
     DeleteOldById(table,id); 
} 
+0

es que no es posible con el método de selección? – hansgiller

+0

no sé especificar data antes de – hansgiller

+0

Ver mi edición. Puede calcular especificar Fecha antes de ejecutar la consulta – Stecya