使用linq c#从数据表中选择整个重复行
Posted
技术标签:
【中文标题】使用linq c#从数据表中选择整个重复行【英文标题】:Select entire duplicate row from datatable with 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 【参考方案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();
【讨论】:
我希望它返回所有重复的行,而不仅仅是第一行。 您需要使用SelectMany。更新了答案 如果必须根据一组唯一列找到重复项,我该怎么做? @b.g 查看此链接。 ***.com/questions/15161180/…【参考方案2】:如果要求是选择整行而不是选择列,那么修改linq如下:
var duplicates = dt.AsEnumerable()
.Select(dr => dr.Field<string>("VMDList"))
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g);
其中重复项将是一个组集合。
【讨论】:
以上是关于使用linq c#从数据表中选择整个重复行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# WinForms 中使用 LINQ 从 DataGridView 中选择多个字段