2011-05-16 71 views
6

我有一個DataTable與一些行,其中之一是一個ID(一個字符串)和一個System.DateTime。 其他行現在不重要。如何從C#中的DataTable使用過濾器刪除行?

現在我想要刪除所有具有相同ID的具有較舊DateTime的行作爲最新的行。

這是可能的嗎?

這裏的例子

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

在這之後我只想:

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

回答

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

是不可能的選擇方法是什麼? – hansgiller 2011-05-16 14:25:45

+0

我不知道在 – hansgiller 2011-05-16 14:30:26

+0

之前指定日期請參閱我的編輯。您可以在執行查詢之前計算specifyDate – Stecya 2011-05-16 14:33:24