我有以下内容:

DataTable table = new DataTable();
table.Columns.Add("id", typeof(string));
table.Columns.Add("date", typeof(DateTime));

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
DateTime date2 = new DateTime(2007, 3, 1, 7, 0, 0);
DateTime date3 = new DateTime(2006, 3, 1, 7, 0, 0);

table.Rows.Add("123", date1);
table.Rows.Add("123", date2);
table.Rows.Add("ABC", date3);


我想执行一个操作,该操作将删除与另一行具有相同ID的所有行,并仅保留具有最新日期的行。

在开始的这个小例子中,我有:

123 2008...
123 2007...
ABC 2006...


采取行动后应为:

123 2008...
ABC 2006...


我怎么能意识到这一点?

(这只是一个小例子,我的真实数据要大得多)

最佳答案

假设您不能直接在数据源处过滤数据(=调整SQL查询),则可以使用以下代码删除行:

var multiDates = from dr in table.AsEnumerable()
                 group dr by dr.Field<string>("id") into grp
                 where grp.Count() > 1
                 select grp.OrderByDescending(gr => gr.Field<DateTime>("date"));

var toDelete = multiDates
    .SelectMany(rows => rows.Skip(1))
    .ToArray();

foreach (var row in toDelete)
    row.Delete();

table.AcceptChanges();

关于c# - 如何仅获取数据表中具有相同ID的最新条目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6173549/

10-11 02:30
查看更多