c# - 在 c# 中根据数据表中的几列过滤不同的行后选择所有列
问题描述
我经历了这里发布的类似问题,但没有找到我的问题的解决方案。我在 C# 中有一个数据表,其中包含重复的行,如下所示:
现在,我必须应用一个过滤器,它根据最后 2 个突出显示的列查找所有不同的行,但在最终结果集中我必须返回所有列。
另外,我会得到一个 ADDRESS_ID,它的对应行应该被返回并且重复的应该被删除。
DataView view = new DataView(ds.Tables[0]);
DataTable distinctValues = view.ToTable(true, "ADDR_LINE_1", "ADDR_LINE_2", "ADDR_LINE_3", "CITY", "STATE", "ZIP", "BOX_NUMBER");
此代码返回 2 行但不是所有列。
还使用了这段代码:
DataTable dtUniqRecords = new DataTable();
dtUniqRecords = ds.Tables[0].DefaultView.ToTable(true, "RELATE_CODE", "ADDRESS_TYPE", "ADDRESS_CODE", "ADDRESS_ID", "ADDR_LINE_1", "ADDR_LINE_2", "ADDR_LINE_3", "CITY", "STATE", "ZIP", "BOX_NUMBER");
但这是返回所有重复的行。
解决方案
您可以使用GroupBy
过滤掉重复值:
var dt = ds.Tables[0];
var distinct = dt.AsEnumerable()
.GroupBy(g => new
{
Address1 = g.Field<string>("ADDR_LINE_1"),
Address2 = g.Field<string>("ADDR_LINE_2")
// any other fields you need to group by
})
.Select(g => g.First()) // select first group including all columns
.CopyToDataTable();
推荐阅读
- python - 在特定列中查找唯一行
- angular - 在 Redux/ngrx 中转换存储属性的位置
- ios - 将图像放在圆形 CGRect 中
- shopify - Shopify:在登录表单上添加客户 [标签]
- php - 尝试使用 wp_signon() 记录用户
- mysql - 使用MySQL将时间划分为开始时间和结束时间时,如何在两个时间范围之间进行查询?
- java - 如果在运行 openssl passwd -apr1 命令时密码包含美元 ($) 字符,则无法获得所需的结果
- node.js - 如何构建节点 5.4.0 npm 3.3.12 - 早些时候它工作正常
- amazon-web-services - 如何让 ALB oidc 标头投入使用?
- python-3.x - 使用“spawn”启动方法了解 python 多处理子进程内存使用情况