使用linq c#从数据表中选择整个重复行

时间:2013-01-07 03:37:01

标签: c# linq

我可以让它返回单列,但我似乎无法弄清楚如何让它给我整行而不仅仅是列值。

帮助!!

它应该返回的字段是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

2 个答案:

答案 0 :(得分:2)

对于具有重复first的行,以下查询将在group中返回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();

答案 1 :(得分:-1)

如果要求选择整行而不是选择列,则按如下方式修改linq:

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

重复项将是一个组集合。