如何从出现一次的数据表中选择值
Posted
技术标签:
【中文标题】如何从出现一次的数据表中选择值【英文标题】:How to select Values from Datatable which appears once 【发布时间】:2015-05-21 08:55:06 【问题描述】:myDataTable 有一个名为ORDER_NO
的列。我想从该表中选择出现一次的行。如果一个值出现两次,则不应选择它。
ORDER_NO
包含值
1000A
1001A
1001B
1002A
1002B
1002C
1000A
1001A
1001B
我只想从上面的值中选择:
1002A
1002B
1002C
因为它们在列中出现一次。有人可以帮忙吗?
【问题讨论】:
有一行名为“ORDER_NO” ?? 我确定他的意思是列……至少我希望如此。 【参考方案1】:所以您只需要根据ORDER_NO
列的唯一行吗?
假设它是一个字符串列,您可以使用 LINQ 的Enumerable.GroupBy
:
var uniqueRows = table.AsEnumerable()
.GroupBy(row => row.Field<string>("ORDER_NO"))
.Where(group => group.Count() == 1)
.Select(group => group.First());
如果您想从可以使用的唯一行中获得新的DataTable
:
table = uniqueRows.CopyToDataTable();
如果您只想要此列的值:
IEnumerable<string> unqiueOrderNumbers = uniqueRows.Select(row => row.Field<string>("ORDER_NO"));
【讨论】:
它显示不同的记录。我想要在行中出现一次的记录。 @MuhammadWaqasIqbal:你的意思是“曾经在桌子上”?它正是这样做的。它只返回ORDER_NO
在整个表中唯一的行,因此没有其他行与ORDER_NO
。这不正确吗?
是的。我已经尝试过代码。但是代码也返回了一些重复值。
@MuhammadWaqasIqbal:那么你没有Where(group => group.Count() == 1)
,或者有一些不可见的字母,比如空格、制表符或换行符,或者一个是Abc
,另一个是abc
。【参考方案2】:
除了@Tim 的回答,你还可以使用 DataView 来简化这件事
DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "ORDER_NO");
我认为这是从任何表中获取不同值的最简单方法。您甚至可以在 ToTable 方法中提及多个列。只需将列名作为参数传递,例如 ORDER_NO 就可以在上面的示例代码中发送。
【讨论】:
以上是关于如何从出现一次的数据表中选择值的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 面试必刷TOP101:数组中只出现一次的两个数字