如何从出现一次的数据表中选择值

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 =&gt; group.Count() == 1),或者有一些不可见的字母,比如空格、制表符或换行符,或者一个是Abc,另一个是abc【参考方案2】:

除了@Tim 的回答,你还可以使用 DataView 来简化这件事

DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "ORDER_NO");

我认为这是从任何表中获取不同值的最简单方法。您甚至可以在 ToTable 方法中提及多个列。只需将列名作为参数传递,例如 ORDER_NO 就可以在上面的示例代码中发送。

【讨论】:

以上是关于如何从出现一次的数据表中选择值的主要内容,如果未能解决你的问题,请参考以下文章

删除在 DataFrame 列中仅出现一次的值

#yyds干货盘点# 面试必刷TOP101:数组中只出现一次的两个数字

34.第一次值出现一次的字符

如何从数据框中提取值以用于条件格式,同时一次将其应用于某些选择类别或数据条目?

获取恰好出现 n 次的值

136. 只出现一次的数字