如何使用过滤器从C#中的DataTable中删除行?

时间:2011-05-16 14:19:19

标签: c# .net linq datatable

我有一个带有一些行的DataTable,其中一行是ID(一个字符串)和一个System.DateTime。 其他行现在并不重要。

现在我想要删除具有相同ID的所有行,这些行具有较旧的DateTime作为最新版本。

这可能吗?

这里有一个例子

  • ID:123日期:2010年12月24日......
  • ID:123 Date:23.12.2010 ...
  • ID:123 Date:22.12.2010 ...

之后我只想要:

  • ID:123日期:2010年12月24日......

1 个答案:

答案 0 :(得分:7)

尝试下一步

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