public Dictionary <int, List <string[]> > CompareColumns(int SelectedColumn) { var Result = new Dictionary <int, List <string[]> >(); try { List <string[]> col1 = null, col2 = null; var task1 = new Task(() => { var col = new[] { FirstDatabase.TableColumns[SelectedColumn].Position }; col1 = FirstData.KeyPlusDataSelection(col).ToList(); }); task1.Start(); var task2 = new Task(() => { var col = new[] { SecondDatabase.TableColumns[SelectedColumn].Position }; col2 = SecondData.KeyPlusDataSelection(col).ToList(); }); task2.Start(); Task.WaitAll(task1, task2); Result.Add(1, col1); Result.Add(2, col2); } catch (Exception e) { Console.WriteLine(e); return(null); } return(Result); }
/// <summary> /// Повертає порівняння лвох колонок як масив рядків /// </summary> /// <param name="SelectedColumn">Номер колонки</param> /// <returns></returns> public Dictionary <int, List <string[]> > CompareColumnsWithKeys(int SelectedColumn) { var Result = new Dictionary <int, List <string[]> >(); try { //дістаєм імена колонок-ключів var list1 = FirstDatabase.TableColumns.Where(item => item.ISKey).ToList(); var list2 = FirstDatabase.TableColumns.Where(item => item.ISKey).ToList(); //Дістаєм мінімальну к-сть головних ключів з таблиць var min = Math.Min(list1.Count, list2.Count); var FirstKeys = new int[min + 1]; var SecondKeys = new int[min + 1]; //додаєм назви цих колонок до запитів for (var i = 0; i < min; i++) { FirstKeys[i] = list1[i].Position; SecondKeys[i] = list2[i].Position; } List <string[]> col1 = null, col2 = null; var task1 = new Task(() => { FirstKeys[min] = FirstDatabase.TableColumns[SelectedColumn].Position; col1 = FirstData.KeyPlusDataSelection(FirstKeys).ToList(); }); task1.Start(); var task2 = new Task(() => { SecondKeys[min] = SecondDatabase.TableColumns[SelectedColumn].Position; col2 = SecondData.KeyPlusDataSelection(SecondKeys).ToList(); }); task2.Start(); Task.WaitAll(task1, task2); Result.Add(1, col1); Result.Add(2, col2); } catch (Exception e) { Console.WriteLine(e); return(null); } return(Result); }
/// <summary> /// Повертає словник з 2-х елементів /// 1-й FirstDb.Except(SecondDb) /// 2-й SecondDb.Except(FirstDb) /// </summary> /// <returns></returns> public Dictionary <int, List <string[]> > CompareFullData() { var Result = new Dictionary <int, List <string[]> >(); try { List <string[]> col1 = null, col2 = null; var sw = new Stopwatch(); var FirstTask = new Task(() => { col1 = FirstData.Except(SecondData, new StringArrayComparer()).ToList(); var list1 = FirstDatabase.TableColumns.Where(item => item.ISKey).ToList(); var FirstKeys = new int[list1.Count]; if (list1.Count != 0) { var temp = col1.AsQueryable().OrderBy(i => i[list1[0].Position], StringComparer.OrdinalIgnoreCase.WithNaturalSort()); for (var i = 1; i < list1.Count; i++) { FirstKeys[i] = list1[i].Position; temp = temp.ThenBy(j => j[FirstKeys[i]]); } col1 = temp.ToList(); } }); sw.Start(); FirstTask.Start(); var SecondTask = new Task(() => { col2 = SecondData.Except(FirstData, new StringArrayComparer()).ToList(); var list2 = SecondDatabase.TableColumns.Where(item => item.ISKey).ToList(); var SecondKeys = new int[list2.Count]; if (list2.Count != 0) { var temp = col2.AsQueryable().OrderBy(i => i[list2[0].Position], StringComparer.OrdinalIgnoreCase.WithNaturalSort()); for (var i = 1; i < list2.Count; i++) { SecondKeys[i] = list2[i].Position; temp = temp.ThenBy(j => j[SecondKeys[i]]); } col2 = temp.ToList(); } }); SecondTask.Start(); Task.WaitAll(FirstTask, SecondTask); Result.Add(1, col1); Result.Add(2, col2); FindUniqueDifferencess(ref Result); sw.Stop(); AdditionalInfo.CompareTime = sw.Elapsed; AdditionalInfo.Different.Add(1, Result[1].Count); AdditionalInfo.Different.Add(2, Result[2].Count); AdditionalInfo.Unique.Add(1, Result[3].Count); AdditionalInfo.Unique.Add(2, Result[4].Count); AdditionalInfo.Same.Add(1, AdditionalInfo.Rows[1] - (AdditionalInfo.Different[1] + AdditionalInfo.Unique[1])); AdditionalInfo.Same.Add(2, AdditionalInfo.Rows[2] - (AdditionalInfo.Different[2] + AdditionalInfo.Unique[2])); } catch (Exception ex) { Console.WriteLine(ex); return(null); } return(Result); }