使用LinQ将一个数据表的重复行复制到另一个数据表

本文关键字:数据表 复制 另一个 一个 LinQ 使用 | 更新日期: 2023-09-27 18:09:39

在c#中是否有方法将源数据表中的重复(基于一个或多个列)行复制到目标数据表中,无论是否使用LINQ ?

使用LinQ将一个数据表的重复行复制到另一个数据表

写你目前所拥有的代码,使你更容易收集意图。

如果你使用LINQ,你想使用组操作符,或者使用LINQ扩展和GroupBy()方法,尽管它会给你键列表。

:

from row in yourDataTable.AsEnumerable()
group row by new { c1 = yourDataTabe["col1"], c2 = yourDataTable["col2"], //etc, your keyed columns } into groupedRow
where groupedRow.Count() > 1
select new 
{ 
    //output whatever anonymous type information you want
}

如果没有LINQ,只使用HashSet<T>作为内存,并做一个简单的检查,如果它在HashSet中,那么你以前见过它,然后只添加到你的二级表中,如果没有,那么将它添加到HashSet中,因为这是你第一次看到这个元素。

我昨天也问过自己同样的问题。也许你会发现下面的内容很有帮助,即使它是VB。净:

Dim dups = From row In source
      Group By grp = New With {Key .Value1 = CInt(row("Value1")), Key .Value2 = CInt(row("Value2"))}
      Into Group Where Group.Count > 1
      Let Text = Group.First.Item("Text")
      Select Group.First
If dups.Any Then
      Dim dest = dups.CopyToDataTable
End If

Let -关键字对于将其他列添加到查询中非常重要,以便获得包含重复行的新DataTable

查找重复记录,必须这样做
int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 };
var duplicates = listOfItems
.GroupBy(i => i)
.Where(g => g.Count() > 1)
.Select(g => g.Key);
foreach (var d in duplicates)
Console.WriteLine(d);