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

2

Я видел следующее решение, используемое для удаления повторяющихся строк в DataTable с помощью LINQ:

Скажем, если у нас есть DataTable с повторяющимися строками, называемыми dt, то следующий statemend, очевидно, выполняет задание:

IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable().Distinct(DataRowComparer.Default);

Но это только удаление повторяющихся строк, которые идентичны. Я хочу, чтобы удалить все строки с повторяющимися значениями определенной строки.

например. Если у нас есть данные с строкой под названием "Электронная почта", как удалить все строки с одинаковым значением электронной почты?

Теги:
linq
duplicates
datatable

1 ответ

8
Лучший ответ

простой способ: используйте GroupBy:

var uniqueContacts = dt.AsEnumerable()
                       .GroupBy(x=>x.Field<string>("Email"))
                       .Select(g=>g.First());

вы также можете попробовать использовать Distinct:

    DataTable dt = new DataTable();  
    dt.Columns.Add("ID");  
    dt.Columns.Add("FirstName");  
    dt.Columns.Add("Email");  
    dt.Rows.Add(1,"Tim","[email protected]");
    dt.Rows.Add(2,"Tim1","[email protected]");
    dt.Rows.Add(3,"Tim2","[email protected]");
    dt.Rows.Add(4,"Tim3","[email protected]");

    dt.AsEnumerable().Distinct(new DataRowComparer()).Dump();

Пользовательский сопоставитель строк:

 public class DataRowComparer : IEqualityComparer<DataRow>  
    {  
        public bool Equals(DataRow t1, DataRow t2)  
        {  
            return (t1.Field<string>("Email")==t2.Field<string>("Email"));  
        }  
        public int GetHashCode(DataRow t)  
        {  
            return t.ToString().GetHashCode();  
        }  
    }  

http://msdn.microsoft.com/en-us/library/bb338049.aspx

  • 0
    Выглядит многообещающе. Собираюсь проверить это прямо сейчас, но в вашем ответе GroupBy , как мне удалить строки? Разве это не только выбор дубликатов сейчас? Извините, я не очень хорош с LINQ ?
  • 1
    @Pedram Select(g=>g.First()) означает: выбрать первый элемент в группе
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню