c# - DataTable:如何获取重复项和重复项的行号

标签 c# linq datatable

我有以下数据表:

Article  Price
ART1        99
ART2       100   
ART3       150 
ART2        90
ART1        50

现在,我应该用这样的重复位置创建一个新的数据表

Article  Duplicates
ART1            1,5
ART2            2,4        
ART3          
ART2            2,4
ART1            1,5

所以关键是“文章”栏

我发现周围只有关于查找哪些是重复值以及使用 linq 重复这些值的次数的示例。

如何使用 linq 实现类似的目标?

谢谢

最佳答案

您可以使用这种方法:

var articleLookup = yourTable.AsEnumerable()
    .Select((row, index) => new { Row = row, RowNum = index + 1 })
    .ToLookup(x=> x.Row.Field<string>("Article"));

DataTable dupTable = new DataTable();
dupTable.Columns.Add("Article");
dupTable.Columns.Add("Duplicates");

foreach(DataRow row in yourTable.Rows)
{
    DataRow addedRow = dupTable.Rows.Add();
    string article = row.Field<string>("Article");
    var dupRowNumList = articleLookup[article].Select(x => x.RowNum).ToList();
    string dupRowNumText = dupRowNumList.Count == 1 ? "" : String.Join(",", dupRowNumList);
    addedRow.SetField("Article", article);
    addedRow.SetField("Duplicates", dupRowNumText);
}

关于c# - DataTable:如何获取重复项和重复项的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240010/

相关文章:

c# - 如何使用 Linq to object 构建层次结构?

linq - 将包含 'with' cte 的 sql 语句转换为 linq

javascript - 如何在数据表上添加复选框选择并将所有值作为数组发送到另一个 html/php 页面?

c# - Google+ 登录 API 和电子邮件

c# 你可以在没有表单的情况下从轴获取位置吗?

c# - Linq 中的 Row_number 超过(按 xxx 分区)?

javascript - 如何使用 Vuetify 2 和 Vue JS 2 在 v-data-table 中使用 vue-draggable(或 Sortable JS)?

c# - 比较数据表并将不匹配的行保存在第三个数据表中

c# - 单击gridview外部的按钮获取gridview的rowindex

c# - 系统.InvalidOperationException : 'There is an error in XML document (0, 0).'