vb.net - 使用LINQ从datatable获取唯一条目,并将结果复制到另一个数据表中

时间:2018-01-17 15:30:46

标签: vb.net linq datatable

对不起,我知道这已经被问了一千次,但我无法弄明白该做什么,所以我真的很感激任何提示。

我有一个巨大的数据表,包含很多列和超过200000行,现在我想从这个数据表中获取一列中具有不同值的所有行,并继续将它们用作数据表。

首先,我希望使用LINQ获取所有唯一条目:

Dim query = From row In d1.AsEnumerable() Select row.Field(Of String)("Key") Distinct

然后我想将这些复制到另一个数据表中:

Dim dt As DataTable = query.CopyToDataTable

然而query.CopyToDataTable不起作用

  

'CopyToDataTable'不是'EnumerableRowCollection的成员'   IEnumerable(Of Char))'

1 个答案:

答案 0 :(得分:2)

您只能CopyToDataTable使用DataRows而不能使用字符串。

对于那些不包含Key的行,您想要做什么 - 列值是unqiue?您想省略所有行还是仅删除重复项(保留第一行)?

您可以使用EmumerableGroupBy。如果你想保留第一个:

Dim keyGroups = d1.AsEnumerable().GroupBy(Function(row) row.Field(Of String)("Key"))
Dim dt As DataTable = keyGroups.Select(Function(g) g.First()).CopyToDataTable()

如果您只想要那些独特的:

Dim dt = keyGroups.Where(Function(g) g.Count() = 1).Select(Function(g) g.First()).CopyToDataTable()