【问题标题】:obtain distinct elements of datatable using vb.net and linq使用 vb.net 和 linq 获取数据表的不同元素
【发布时间】:2013-04-11 18:15:37
【问题描述】:

我正在使用 vb.net 框架 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()

有人可以帮助我吗?...

【问题讨论】:

  • 如果 Distinct 不可用,则表明您尝试使用它的对象未实现 EqualityComparer。我的猜测是,你需要调用 row.Field(OfString)("User").Value 什么的?!我没有进入 VB,所以它可能完全是我在这里写的。

标签: linq


【解决方案1】:

您可以为此使用 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

【讨论】:

  • 能否请您 edit 解释为什么这段代码回答了这个问题?纯代码答案是 discouraged,因为它们不教授解决方案。
【解决方案2】:

语法是

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多