Как проверить, содержит ли DataTable DataRow? - PullRequest
0 голосов
/ 06 ноября 2011

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

Ответы [ 4 ]

2 голосов
/ 06 ноября 2011

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

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 проверить эти вещи внутри вас - нет смысла заново изобретать колесо. Что касается того, как это делает (независимо от того, эффективно это или нет), это будет для вас упражнением.

0 голосов
/ 08 августа 2014

Намного, намного проще:

datatable.Columns.Contais("ColumnName")
0 голосов
/ 06 ноября 2011

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

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 };
0 голосов
/ 06 ноября 2011

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

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

...