【问题标题】:Get duplicate rows from datatable based on single column基于单列从数据表中获取重复行
【发布时间】:2014-08-03 12:01:12
【问题描述】:

我正在尝试根据单列值从数据表中获取行。我有 FiledName, FieldType, TableName 是列名。

下面的查询工作正常,但我只得到FieldName。不是所有的列。

如何从下面获取所有列?

Dim duplicates = DataSourceTable.AsEnumerable().GroupBy(Function(i) i.Field(Of String)("FieldName")).Where(Function(g) g.Count() > 1).Select(Function(g) g.Key)
    DataSourceTable = New DataTable
    Dim row As DataRow
    For Each dup In duplicates
        row = DataSourceTable.NewRow
        'row(0) = dup// I want get all values columns with index
    Next

【问题讨论】:

    标签: sql vb.net linq datatable


    【解决方案1】:

    您需要在这里执行两个步骤:一个获取重复的 FieldName 值,另一个获取您感兴趣的其余值。如果使用临时表,最简单的解决方案:

    INSERT INTO myTempTable(FieldName) SELECT FieldName FROM MySourceTable WHERE something = 不管 GROUP BY FieldName HAVING count(*) > 1;

    SELECT a.FieldName, a.FieldType, a.TableName FROM MySourceTable a JOIN myTempTable b ON (a.FieldName = b.FieldName) ORDER BY a.FieldName, a.TableName;

    【讨论】:

      【解决方案2】:

      如果您需要整行而不是只选择组的键,那么不要只选择键。

      简单的改变

      Dim duplicates = DataSourceTable.AsEnumerable()
                                      .GroupBy(Function(i) i.Field(Of String)("FieldName"))
                                      .Where(Function(g) g.Count() > 1)
                                      .Select(Function(g) g.Key)
      

      Dim duplicates = DataSourceTable.AsEnumerable()
                                      .GroupBy(Function(i) i.Field(Of String)("FieldName"))
                                      .Where(Function(g) g.Count() > 1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 2019-08-17
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多