首页 > 解决方案 > 在 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");

但这是返回所有重复的行。

标签: c#

解决方案


您可以使用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();

推荐阅读