比较一个数据表列中的值

问题描述 投票:0回答:1

我有一个从csv读取的数据表。我想做的是在标题为“ name”的一行中找到所有重复的名称,并将它们添加到另一个datable中供以后使用。我到目前为止的代码:

private DataTable MatcherTable(DataTable table)
    {

        DataTable match = new DataTable();

        match = table.Clone();

        var equalRows = table.Rows.Cast<DataRow>().Where(dataRow => dataRow["name"] == dataRow["name"]).ToList();

        foreach (var equalRow in equalRows)
        {
            match.Rows.Add(equalRow.ItemArray);
        }

        return match;
    }

但是,当我返回应该充满匹配项的表时,它返回的是我读入的完全相同的表。我缺少简单的东西吗?

c# datatable
1个回答
0
投票

创建空列表,因此您可以执行此操作

List<string> names= new List<string>();
foreach(var row in table.Rows)
{
  if(names.Contains(row["name"])
  {
  names.Add(row["name"].ToString());
  }
else
{
   DataRow dr = match.NewDataRow();
   dr.ItemArray=row.ItemArray; match.Rows.Add(dr);
}
}

我在拼写或smt上可能有一些错误,但这只是为了给您一个主意!


0
投票

代码只是复制输出表中的所有数据行,因为比较表达式会将相同的行和列与其自身进行比较。

您可以使用单个Linq表达式解决问题

private DataTable MatcherTable(DataTable table)
{
    DataTable match = table.Rows.Cast<DataRow>()
                           .GroupBy(x => x["Name"])
                           .Where(g => g.Count() > 1)
                           .Select(k => k.FirstOrDefault())
                           .CopyToDataTable();
    return match;
}
© www.soinside.com 2019 - 2024. All rights reserved.