Я видел следующее решение, используемое для удаления повторяющихся строк в DataTable
с помощью LINQ
:
Скажем, если у нас есть DataTable
с повторяющимися строками, называемыми dt
, то следующий statemend, очевидно, выполняет задание:
IEnumerable<DataRow> uniqueContacts = dt.AsEnumerable().Distinct(DataRowComparer.Default);
Но это только удаление повторяющихся строк, которые идентичны. Я хочу, чтобы удалить все строки с повторяющимися значениями определенной строки.
например. Если у нас есть данные с строкой под названием "Электронная почта", как удалить все строки с одинаковым значением электронной почты?
простой способ: используйте 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();
}
}
GroupBy
, как мне удалить строки? Разве это не только выбор дубликатов сейчас? Извините, я не очень хорош сLINQ
?Select(g=>g.First())
означает: выбрать первый элемент в группе