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

问题描述 投票:0回答:2

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

它应该返回的字段是 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
c# linq
2个回答
3
投票

以下查询将为具有重复

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
投票

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

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

重复项将成为一组集合。

© www.soinside.com 2019 - 2024. All rights reserved.