Ниже приведен некоторый код, который выводит пакет из нескольких файлов XML и добавляет их в свою собственную таблицу данных в наборе данных:
private void Btn_Import_Click(object sender, RoutedEventArgs e)
{
/*ILRChecks.ILRReport.NullChecks();
ILRChecks.ILRReport.CrossYear();*/
DataSet dataSet = new DataSet();
DataTable diff = new DataTable();
diff.TableName = "Differences";
diff.Columns.Add("LearnRefNumber");
diff.Columns.Add("ULN");
//diff.Columns.Add("FamilyName");
//diff.Columns.Add("GivenNames");
diff.Columns.Add("DateofBirth");
diff.Columns.Add("NINumber");
diff.Columns.Add("Message");
Dictionary<int,DataTable> Tables = new Dictionary<int,DataTable>();
foreach (string str_FileLocation in Global.fileNames)
{
FileInfo fileInfo = new FileInfo(str_FileLocation);
string str_xmlFileName = fileInfo.Name;
XDocument doc = XDocument.Load(str_FileLocation);
var ns = doc.Root.GetDefaultNamespace();
var learner = doc.Descendants(ns + "Learner");
string shortfile = str_xmlFileName.Substring(13,4);
StringReader reader = new StringReader(new XElement("Sample", learner).ToString());
DataSet ds = new DataSet();
ds.ReadXml(reader);
Tables.Add(int.Parse(shortfile), ds.Tables[0]);
DataTable dt = ds.Tables[0].Copy();
dt.TableName = shortfile;
dataSet.Tables.Add(dt);
}
Затем я хочу иметь возможность выполнить циклчерез каждый из этих наборов данных, сравнивая их, в порядке имени таблицы данных.Имена были преобразованы в целые числа и должны начинаться в последний год, то есть 1819, затем 1718 и так далее, в зависимости от того, сколько файлов существует.Я полагаю, что у меня есть рабочий оператор foreach, позволяющий циклу правильно определять порядок таблиц и помещать их в таблицу текущих элементов:
foreach (var item in Tables.OrderByDescending(k => k.Key))
{
if (item.Key != Tables.OrderByDescending(k => k.Key).Last().Key)
{
DataTable dataTable_CurrentItem = item.Value;
}
}
Затем у меня есть часть кода, которая работает автономно, но мне нужно включить это в вышеприведенное как часть цикла, сравнивая файлы по мере прохождения, но я подозреваю, что эта часть не совсем правильная, и следует ли ей идти в приведенном выше утверждении foreach, я 'я не уверен:
var diff_ULNDOB = from Latest in dataSet.Tables["1819"].AsEnumerable()
join previous in dataSet.Tables["1718"].AsEnumerable()
on Latest.Field<string>("ULN") equals previous.Field<string>("ULN")
where Latest.Field<string>("DateofBirth") != previous.Field<string>("DateofBirth")
select new { ULN = Latest.Field<string>("ULN"), FamilyName = Latest.Field<string>("FamilyName") };
if (diff_ULNDOB.Any())
{.
MessageBox.Show("PROBLEM!!!!!!");
}