Я создал класс, как показано ниже, для представления составной первичного ключа модели:Определение уникальных значений в C# Списка
public class PrimaryKeyModel
{
public string ColumnName { get; set; }
public string ColumnValue { get; set; }
public int RowNumber { get; set; } // always unique
}
Это в основном отражающих имена/значение столбцов, которые вместе составляют первичные key, плюс номер строки, в которой эта комбинация принадлежит; первоначально в Таблице.
меня тогда поставить эту модель в список и заселили ее с данными из таблицы:
List<PrimaryKeyModel> primaryKeysList = new List<PrimaryKeyModel>;
Я хотел бы проверить primaryKeysList и посмотреть, если он имеет какие-либо дублирующие значения, и если у него есть, я хотел бы знать номера строк, где эти значения дублируются.
Я пробовал разные способы, такие как загрузка этого списка в HashSet, словарь и использование this solution here at this link, но не работало. В любом случае я могу это разрешить.
Спасибо.
Обновление - вот пример отображения данных. UniqueColumnsModel - это то же самое, что и PrimaryKeyModel; Я изменил его здесь, чтобы сделать его более ясным.
Edit:. Разъяснение вопроса
Я пытаюсь импортировать данные из электронной таблицы (которая может иметь много типов (один для продаж, один для котировок ..etc)) в базу данных. Таблица конфигурации в базе данных определяет, какой столбец (ы) в электронной таблице будет составлять первичный ключ в таблице назначения. Моя задача - создать подпрограмму, которая проверяет данные электронной таблицы перед ее загрузкой (импортированием) в базу данных с помощью моего приложения. Я хочу, чтобы не проверять, что столбцы, установленные как составные части первичного ключа, не содержат дублированных данных, так что ограничение первичного ключа НЕ нарушено в таблице адресатов при вставке.
Список, упомянутый здесь (PrimaryKeyModel) содержит имя столбца в электронной таблице (которое вместе с другими составляет первичный ключ), значение столбца в электронной таблице и номер строки в электронной таблице, где это значение существует. Список заполняется через строки столбцов foreach/foreach. Поэтому я надеюсь, что это улучшит вопрос.
Это действительно хороший шанс использовать BinarySearch в списке, передавая собственный компаратор для PrimaryKeyModel. BinarySearch возвращает те, которые дополняют результаты, указывающие индекс, в котором этот элемент существует. – Haney
@DavidHaney Прежде всего, двоичный поиск предназначен для поиска одного элемента, а не для поиска дубликатов, во-вторых, для этого требуется сортировка данных, что, похоже, не так. – Servy
@Servy, но я имел в виду, что он мог использовать его во время добавления в список, чтобы проверить дубликат при добавлении ... Одиночный обход данных O (n) с двоичным поиском O (log n) для каждого элемента. – Haney