我有以下内容:
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...
Action 之后应该是:
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# - 如何只获取 DataTable 中具有相同 ID 的最新条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173549/