【问题标题】:SELECT Unique rows from Datagridview using LINQ使用 LINQ 从 Datagridview 中选择唯一行
【发布时间】:2013-11-18 21:13:16
【问题描述】:

我正在尝试从 datagridview 中选择所有行\列,其中第一列使用 LINQ 是唯一的。

数据网格视图:

1     Blue     1111
1     Blue     1111
2     Green    1234
3     Orange   3211
2     Green    1234
4     Red      2222

试图得到这个输出:

1     Blue     1111
2     Green    1234
3     Orange   3211
4     Red      2222

我能够使用以下代码从第一列中提取所有唯一记录,但我不确定如何获取其余列:

        Dim unique() As String = (From row As DataGridViewRow In dgvMaestro.Rows.Cast(Of DataGridViewRow)() _
         Where Not row.IsNewRow _
         Select CStr(row.Cells(0).Value)).Distinct.ToArray

        For Each a As String In unique
            Debug.Print(a)
        Next

输出:

1
2
3
4

谢谢

【问题讨论】:

  • 你说的是Select CStr(row.Cells(0).Value)) - 这只会给你第一个元素的值(因此是1,2,3,4)......你可以通过输入Select row返回该行,但是你仍然需要一种方法来输出它......
  • 我认为这就是我苦苦挣扎的地方。我仍在尝试熟悉 linq,但我为调用其他列所做的任何更改都会中断查询。如果我只是指定行,那么它不会让我包含不同的。

标签: vb.net linq datagridview distinct


【解决方案1】:

首先,您需要导入 2 个命名空间,以便与 linq 不同,以使用 DataTables 中的 AsEnumerable() 方法和 DataRows 中的 Field() 方法

Imports System.Data.DataTableExtensions
Imports System.Data.DataRowExtensions

声明新的数据表

Dim NewTbl As New System.Data.DataTable

在您的场景中添加列

NewTbl.Columns.Add("ID", GetType(Integer))
NewTbl.Columns.Add("Color", GetType(String))
NewTbl.Columns.Add("Value", GetType(Integer))

Linq 使用表 'TblValues' 作为数据源

Dim results = (From row in TblValues.AsEnumerable() select col1 = row(Of Integer)("ID"), col2 = row(Of String)("Color"), col3 = row(Of Integer)("Value")).Distinct().ToList()

使用 for each 迭代结果中的元素,原因是因为 results 是一个对象数据行集合,并且不会将 auto 转换为 table

For each r in results
  Dim Row as System.Data.DataRow = NewTbl.NewRow
  Row("ID") = r.col1
  Row("Color") = r.col2
  Row("Value") = r.col3
  NewTbl.Rows.Add(Row)
next

现在您有了一个内部具有不同值的 DataTable 'NewTbl'

【讨论】:

    【解决方案2】:

    解决这个问题的最好方法是编写一个比较器来比较整行。

    Dim noduplicates = dgvMaestro.Rows.Cast(Of DataGridViewRow).Distinct(New RowComparer())
    

    msdn上有一些比较器的例子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2013-07-04
      相关资源
      最近更新 更多