Kingshuk_SP Ответов: 2

Удаление повторяющихся значений столбцов таблицы данных


I have a datatable like below:

Name               Department
John Alter         D01
Prakash Kiran      D01
Steffy Cold        D01
Julia Roberts      D02
Candy Mitchel      D02
Monika Diesel      D03


I want it like below: 

Name               Department
John Alter         D01
Prakash Kiran      
Steffy Cold        
Julia Roberts      D02
Candy Mitchel      
Monika Diesel      D03


when its ordered by a department, it should not repeat for the same department.
But the row should be there, only if there is same value in next row under Department column, that needs to be BLANK

help ASAP


Что я уже пробовал:

Used the below code from someone.. but its not working


DataTable newDt = dt.Clone();
for (int i = 0; i < dt.Rows.Count; i++)
{
    DataRow newRow = newDt.NewRow();
    newRow["Name"] = dt.Rows[i]["Name"];
    int originalIndex = dt.AsEnumerable().ToList().FindIndex(x => x["Department"] == dt.Rows[i]["Department"]);
    if (originalIndex < i)
    {
        newRow["Department"] = "";
    }
    else
    {
        newRow["Department"] = dt.Rows[i]["Department"];
    }
    newDt.Rows.Add(newRow);
}

2 Ответов

Рейтинг:
11

Thomas Daniels

Этот код был моим, и, как мы установили в нашем обсуждении комментариев, замена == оператор по .Equals метод работает.

Для дальнейшего использования, вот почему? это сработало:
Возвращаемый тип x["Department"] и dt.Rows[i]["Department"] является object (и не строка, потому что таблица может содержать и другие данные). Когда == используется на object, это эквивалентно вызову Объект.Референтные значения[^]- здесь не имеет значения, что фактическим типом является строка, объект.ReferenceEquals все еще используется (и это то, что я забыл при написании исходного кода). Если вы используете .Equals впрочем, тогда это будет использовать Строка.Равняется[^] (что вам и нужно), потому что у вас есть строка, а тип строки переопределяет Object.Equals.


Рейтинг:
0

Karthik_Mahalingam

пробовать

DataTable dt = new DataTable();
           dt.Columns.Add("Name");
           dt.Columns.Add("Department");
           dt.Rows.Add("John Alter", "D01");
           dt.Rows.Add("Prakash Kiran", "D01");
           dt.Rows.Add("Steffy Cold", "D01");
           dt.Rows.Add("Julia Roberts", "D02");
           dt.Rows.Add("Candy Mitchel", "D02");
           dt.Rows.Add("Monika Diesel", "D03");
           var departments = dt.AsEnumerable().Select(k => k.Field<string>("Department")).Distinct().OrderBy(k=>k).ToArray();

           foreach (string dept in departments)
           {
               int i = 0;
               foreach (DataRow row in dt.Rows)
               {
                   if (row["Department"].ToString() == dept) {
                       if (i > 0) {
                           row["Department"] = "";
                       }
                       i++;
                   }
               }
           }