如何使用筛选器在C#中从DataTable中删除行?

6
我有一个DataTable,其中包含一些行,其中之一是ID(字符串)和System.DateTime。
现在我想删除所有具有旧DateTime的相同ID的行,这些行与最新的DateTime相同。
这是否可能?
以下是示例:
  • ID:123 Date:24.12.2010 ...
  • ID:123 Date:23.12.2010 ...
  • ID:123 Date:22.12.2010 ...
之后,我只想要:
  • ID:123 Date:24.12.2010 ...
1个回答

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

使用select方法不行吗? - hansgiller
我不知道指定日期之前。 - hansgiller
请看我的编辑。在执行查询之前,您可以计算指定日期。 - Stecya
现在第二件事是,您只能获得一个最大值,但我有多个ID,每个ID在选择语句之后应该只存在一次,具有最新日期。 - hansgiller
所有都没问题,但是他没有得到指定日期(将日期更改为时间)。我的定义看起来像这样:time.ColumnName = "Time"; time.DataType = Type.GetType("System.DateTime"); data.Columns.Add(time); - hansgiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接