使用vb.net和linq获取数据表的不同元素

时间:2013-04-11 18:15:38

标签: linq

我正在使用vb.net framework 3.5

我有一个数据集名称dsData,其中包含下一个信息

Page        User     Permission
Simulator   agarza   1
Buys        agarza   1
File loads  agarza   0
scenaries   agarza   0
Simulator   mjobs    1
Buys        mjobs    0
File loads  mjobs    1
scenaries   mjobs    1

我想获得用户的不同名称,我正在尝试这样做:

    Dim query= From row In dsData.Tables(0).AsEnumerable() _
               Select row.Field(Of String)("User") Distinct

在前面的代码中我收到此错误:在此上下文中无法访问方法'Distinct'的定义。

然后我想将结果放在数据表中,做这样的事情

    Dim dt As DataTable = query.CopyToDataTable()
有人可以帮助我吗?...

3 个答案:

答案 0 :(得分:2)

尝试使用基于方法的查询语法:

Dim names As List(Of String) = dsData.Tables(0).AsEnumerable() _
                                               .Select(Function(r) r.Field(Of String)("User")) _
                                               .Distinct() _
                                               .ToList()

答案 1 :(得分:2)

语法是

(From row In dsData.Tables(0).AsEnumerable() _
           Select row.Field(Of String)("User")).Distinct()

关于复制到数据表,请查看Exception using CopyToDataTable with "new {..}" LINQ query的答案。

答案 2 :(得分:2)

您可以使用ToTable(distinct As Boolean,ParamArray columnNames As String())方法。

dsData.Tables(0).DefaultView.ToTable(True, "User")

这将为您返回不同的用户。如果需要,可以添加多个列名称。

这是msdn文档。 https://msdn.microsoft.com/en-us/library/wec2b2e6(v=vs.110).aspx