0

我想从我的中删除重复项,DataTable所以我正在使用DataTable.AsEnumerable().Distinct(DataRowComparer.Default),但它不能满足我的需要。我认为因为每个重复的行都有它唯一的主键列。

我怎样才能做我需要的?自己写DataRowComparer?我不想要 - 因为默认值必须有效。

4

2 回答 2

3

您可以使用MoreLINQ项目中的DistinctBy 。基本上,您指定从数据行到您感兴趣的列的投影,它将使用它。例如:

var rows = DataTable.AsEnumerable()
                    .DistinctBy(row => new { Name = row["Name"],
                                             Age = row["Age"] });

当你说“默认必须工作”时,如果你有一个普通的主键列,那基本上不会发生。具有不同主键值的两行彼此不重复,因为它们的数据不同。

另一种选择是投影到没有该主键列的数据行,然后使用普通Distinct方法。

于 2009-10-18T11:48:29.280 回答
0

也许您可以使用 defaultview.rowfilter 启动按唯一列分组的查询,并选择 MIN(或 MAX)RowId 作为要保留的行。

查看问题以获取有关查询的更多信息。

于 2009-10-18T11:47:05.707 回答