c# datatable 用空格替换重复值

c # datatable replace duplicate values with blanks

我有一个这样的数据集。我想像第二列一样用空白替换重复值。所以只有第一个值的实例被输出,其他行是空白的。

current output
1       1
1 
1
1
2       2
2       
2
3       3
3
3
3
3
4       4
4
4
4

我从这个开始,但是循环中的第二次空白不等于 i-1,所以我有点卡住了。

for (int i = 1; i < dt.Rows.Count - 1; i++)
{
    // Compare with previous row using index
    if (dt.Rows[i]["Supplier_No"].ToString().Equals(dt.Rows[i - 1]["Supplier_No"].ToString()))
    {
        dt.Rows[i]["Supplier_No"] = "";
    }
}

您需要记住原始值。

string previous = dt.Rows[0]["Supplier_No"].ToString();

for (int i = 1; i < dt.Rows.Count - 1; i++)
{
    // Compare with previous row using index
    if (dt.Rows[i]["Supplier_No"].ToString().Equals(previous))
    {
        dt.Rows[i]["Supplier_No"] = "";
    }
    else
    {
        previous = dt.Rows[i]["Supplier_No"].ToString();
    }
}

测试了以下代码:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data;


namespace ConsoleApplication181
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Supplier_No", typeof(int));
            dt.Rows.Add(new object[] {1});
            dt.Rows.Add(new object[] {1});
            dt.Rows.Add(new object[] {1});
            dt.Rows.Add(new object[] {1});
            dt.Rows.Add(new object[] {1});
            dt.Rows.Add(new object[] {2});
            dt.Rows.Add(new object[] {2});
            dt.Rows.Add(new object[] {2});
            dt.Rows.Add(new object[] {2});
            dt.Rows.Add(new object[] {3});
            dt.Rows.Add(new object[] {3});
            dt.Rows.Add(new object[] {3});
            dt.Rows.Add(new object[] {3});
            dt.Rows.Add(new object[] {3});
            dt.Rows.Add(new object[] {3});
            dt.Rows.Add(new object[] {4});
            dt.Rows.Add(new object[] {4});
            dt.Rows.Add(new object[] {4});
            dt.Rows.Add(new object[] {4});
            dt.Rows.Add(new object[] {4});

            var groups = dt.AsEnumerable().GroupBy(x=> x.Field<int>("Supplier_No"));

            foreach (var group in groups)
            {
                for (int i = 1; i < group.Count(); i++)
                {
                    group.Skip(i).First()["Supplier_No"] = DBNull.Value;
                }
            }

        }

 
    }
   
 
}