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

时间:2011-09-23 11:30:07

标签: c# .net asp.net linq .net-4.0

有没有办法将源数据表中的副本(基于一列或多列)行复制到目标数据表中,在C#中是否包含LINQ?

3 个答案:

答案 0 :(得分:0)

写出你目前使用的代码可以更容易收集意图。

如果您使用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,因为它是你第一次看到这个元素。

答案 1 :(得分:0)

asked same myself yesterday。也许你会发现以下有用,即使它是VB.NET:

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非常重要。

答案 2 :(得分:0)

枝 您必须执行类似的操作才能使用LINQ

查找重复记录
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);