【问题标题】:Select entire duplicate row from datatable with linq c#使用linq c#从数据表中选择整个重复行
【发布时间】:2012-12-20 19:17:27
【问题描述】:

我可以让它返回单列,但我似乎不知道如何让它给我整行而不是列值。

救命!!

它应该返回的字段是 VDMList 和 Table。

var duplicates = dt.AsEnumerable()
    .Select(dr => dr.Field<string>("VMDList"))
    .GroupBy(x => x)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToList();


columns of DT Table, VDMList
output is
4  | 02,2
12 | 03,3
15 | 02,2

【问题讨论】:

  • 因为你显示输出?
  • 你也可以给我们看看表结构吗?
  • 整行-> 在什么条件下,会遗漏一些值
  • DT Table的列,VDMList输出为4 | 02,2 12 | 03,3 15 | 02,2

标签: c# linq


【解决方案1】:

以下查询将在 group 中返回 first 项,以获取具有重复 VMDList 的行。请注意,没有选择first 项目的标准。它可以是任何random 行。

var duplicates = dt.AsEnumerable()
    .GroupBy(dr => dr.Field<string>("VMDList"))
    .Where(g => g.Count() > 1)
    .Select(g => g.First())
    .ToList();

要返回所有重复的行,请使用SelectMany

var allDuplicates = dt.AsEnumerable()
    .GroupBy(dr => dr.Field<string>("VMDList"))
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .ToList();

【讨论】:

【解决方案2】:

如果要求是选择整行而不是选择列,那么修改linq如下:

var duplicates = dt.AsEnumerable()
.Select(dr => dr.Field<string>("VMDList"))
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g);

其中重复项将是一个组集合。

【讨论】:

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