我有一个datatable,它有两个列"DT“和"ASOF",都是日期。有些行具有DT的重复值,我通过以下操作找到了这个值:
      var duplicateGroups = dt.AsEnumerable()
                                  .GroupBy(row => row.Field<SqlDateTime>("DT"))
                                  .Where(g => g.Count() > 1);但是还有另一篇专栏," ASOF“,我想去掉一个基于"ASOF”值的重复DTs,基本上任何ASOF日期都是最新的。
我可以想到一个for循环,它可以通过创建一个重复的数组,找到最新的ASOF,然后从带有这个值的DB表中删除所有其他的。然而,我觉得Linq有一些能力能够做到这一点,可能是用一个比较器。但我对此有一些非常基本的认识。
有什么想法吗?
发布于 2016-01-07 17:15:06
除非您确实需要修改原始DataTable,否则只需创建一个投影,该投影将在每个具有“最新”ASOF值的DT组中为您提供记录:
  var rows = dt.AsEnumerable()
               .OrderBy(row => row.Field<SqlDateTime>("ASOF"))
               .GroupBy(row => row.Field<SqlDateTime>("DT"))
               .Select(rg => rg.First())
               .ToList();然后,要么清除原始数据表并用这些行替换它,要么根据这些行创建一个新的DataTable,并将其与原始数据交换。
另一种选择是在数据加载到数据表之前过滤数据,但是由于您没有指定如何发生这种情况,所以我无法提供任何指导。
https://stackoverflow.com/questions/34661117
复制相似问题