我有以下内容:
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/