У меня есть таблица данных, которая содержит много повторяющихся строк. Мне нужно отфильтровать эти строки из таблицы данных на основе нескольких столбцов, чтобы получить отдельные строки в таблице данных, полученных в результате.Удаление повторяющихся строк из таблицы данных на основе нескольких столбцов
Barcode Itemid PacktypeId
1 100 1
1 100 2
1 100 3
1 100 1
1 100 3
нужно только те строки, которые содержит packtypeid 1,2,3 оставшиеся 4-й и 5-й строки должны быть удалены
Я попытался с помощью двух методов, но никто не делал не получается для лучшего результата
таблица данных содержит более 10 столбцов, но Уникальный столбец является «Штрих-код», «ItemID», «PackTypeID»
Способ-1:
dt_Barcode = dt_Barcode.DefaultView.ToTable(true, "Barcode", "ItemID", "PackTypeID");
Описанный выше метод фильтра строки, но он возвращает столбцы только 3 значения столбцов мне нужно целых 10 значений столбцов.
Method-2:
List<string> keyColumns = new List<string>();
keyColumns.Add("Barcode");
keyColumns.Add("ItemID");
keyColumns.Add("PackTypeID");
RemoveDuplicates(DataTable table, List<string> keyColumns)
{
var uniqueness = new HashSet<string>();
StringBuilder sb = new StringBuilder();
int rowIndex = 0;
DataRow row;
DataRowCollection rows = table.Rows;
int i = rows.Count;
while (rowIndex < i)
{
row = rows[rowIndex];
sb.Length = 0;
foreach (string colname in keyColumns)
{
sb.Append(row[colname]);
sb.Append("|");
}
if (uniqueness.Contains(sb.ToString()))
{
rows.Remove(row);
}
else
{
uniqueness.Add(sb.ToString());
rowIndex++;
}
}
Описанный выше метод возвращает исключение, что нет ни одной строки в положении 5
Спасибо за это приятное решение! Я не доверяю методу 1, который иногда уходит навсегда и не возвращается. –