Я пытаюсь получить все строки, которые существуют в allData
, но не в removeData
DataTable.GetChanges() продолжает возвращаться NULL
public static DataTable RemoveDuplicateRows(DataTable allData,
DataTable removeData)
{
removeData.Merge(allData);
DataTable newData = removeData.GetChanges();
removeData.RejectChanges();
return newData;
}
removeData
пуст до вызова в этом случае (только новый DataTable ())
Но newData
всегда имеет значение нуля после DataTable newData = removeData.GetChanges();
линии
Окончательного решения:
public static DataTable RemoveDuplicateRows(DataTable allData, DataTable removeData)
{
DataTable duplicate = allData.Clone();
foreach (DataRow row in allData.Rows)
{
duplicate.ImportRow(row);
}
foreach (DataRow row in duplicate.Rows)
{
row.SetAdded();
}
removeData.Merge(duplicate);
DataTable newData = removeData.GetChanges(DataRowState.Added);
removeData.RejectChanges();
allData.RejectChanges();
return newData;
}
Итак, теперь я пишу старые данные и схему в файловую систему (WriteXml и WriteXmlSchema), затем загружаю их в removeData (с ReadXmlSchema и ReadXml). И allData содержит данные из db (у которого есть еще 2 записи, чем в файловой системе xml). Поэтому, когда я добираюсь до этого кода, я вижу, что allData имеет 21 строку и removeData имеет 19. Затем слияние приводит к тому, что removeData имеет 40! И тогда GetChanges все еще возвращает null – CaffGeek
Исправлены первичные ключи, так что когда я объединил их, у них есть 21 строка, но GetChanges по-прежнему возвращает NULL! – CaffGeek
Придется работать с некоторым mojo, чтобы добавить добавленные строки, которые будут помечены как добавленные, я обновил исходный вопрос с окончательным решением – CaffGeek