Как проверить, содержит ли DataTable DataRow?

#c# #datatable #dataset

#c# #datatable #набор данных

Вопрос:

У меня есть нетипизированный набор данных, заполненный данными из пользовательского ввода (без базы данных). Нет столбца первичного ключа (мои данные пока не нуждались в первичном ключе)! Есть ли какой-либо способ избежать «грубой силы», если я хочу проверить, не пытается ли пользователь вставить новую строку, уже существующую в моем DataTable? Как я должен выполнить эту проверку?

Ответ №1:

Вы можете вручную создать уникальные ограничения для вашего DataTable:

 DataTable custTable = custDS.Tables["Customers"];
UniqueConstraint custUnique = new UniqueConstraint(new DataColumn[] 
    {custTable.Columns["CustomerID"], 
    custTable.Columns["CompanyName"]});
custDS.Tables["Customers"].Constraints.Add(custUnique);
  

В этом примере вы получите исключение (типа ConstraintException ), если попытаетесь добавить строку в таблицу, где CustomerID и CompanyName были дубликатами другой строки с тем же CustomerID и CompanyName .

Я бы просто позволил DataTable проверить эти вещи для вас внутренне — нет смысла изобретать велосипед. Что касается того, как это делается (независимо от того, эффективно это или нет), это должно быть упражнением для вас.

Ответ №2:

Что вы можете сделать, так это использовать DataView. Dataview позволяет использовать предложение where с данными DataView.

Проверьте это таким образом.

Комментарии:

1. я не думаю, что понимаю ваш ответ… Я уже заполнил datatable, и я просто хочу проверить, содержит ли новая строка, которая собирается быть добавлена, точно такие же данные, как и какая-либо другая строка, уже присутствующая в datatable..

2. Извините, я неправильно понял. Исправил мой ответ.

Ответ №3:

Чтобы проверить наличие дубликатов, попробуйте

 if (table.Rows.Contain(PriKeyTypeValue)) /*See if a Primary Key Value is in 
the table already */
    continue;
else
    table.Row.Add(value1, value2, value3);
  

Если вы хотите иметь возможность вставлять повторяющиеся строки, но не хотите, чтобы возникало исключение, настройте свой первичный ключ как уникальный самоинкрементирующийся int, тогда вы можете вставить столько дубликатов, сколько захотите, без необходимости проверять, содержит ли таблица это значение.вы можете установить значение первичного ключа, как показано ниже….

 DataTable table = new DataTable();

table.Columns.Add("Column", typeof(int));

DataColumn column = table.Columns["Column"];
column.Unique = true;
column.AutoIncrement = true;
column.AutoIncrementStep = 1; //change these to whatever works for you
column.AutoIncrementSeed = 1;
table.PrimaryKey = new DataColumn[] { column };
  

Ответ №4:

Намного, намного более простой способ:

 datatable.Columns.Contais("ColumnName")