public DataRow build(DataRow input) { DataTable resultTable = new DataTable(); String casenum = Convert.ToString(input["casenum"]); String file = input.Table.TableName; int contacts = Convert.ToInt32(input["contacts"]); string[] beneficiars = Convert.ToString(input["beneficiars"]).Split(new char[] { '-' });; String insurer_citizenship = input.Table.Columns.Contains("insurer_citizenship") ? Convert.ToString(input["insurer_citizenship"]) : null; String insured_citizenship = input.Table.Columns.Contains("insured_citizenship") ? Convert.ToString(input["insured_citizenship"]) : null; String insurer_birthdate = input.Table.Columns.Contains("insurer_birthdate") ? Convert.ToString(input["insurer_birthdate"]) : null; String insured_birthdate = input.Table.Columns.Contains("insured_birthdate") ? Convert.ToString(input["insured_birthdate"]) : null; String insurer_age = input.Table.Columns.Contains("insurer_age") ? Convert.ToString(input["insurer_age"]) : null; String insured_age = input.Table.Columns.Contains("insured_age") ? Convert.ToString(input["insured_age"]) : null; String beneficiar_citizenship = input.Table.Columns.Contains("beneficiar_citizenship") ? Convert.ToString(input["beneficiar_citizenship"]) : null; String beneficiar_age = input.Table.Columns.Contains("beneficiar_age") ? Convert.ToString(input["beneficiar_age"]) : null; List <DataColumn> exceptedColumns = input.Table.Columns.OfType <DataColumn>() .ToList().Where(x => x.ColumnName == "contacts" || x.ColumnName == "beneficiars" || x.ColumnName == "casenum" || x.ColumnName == "insurer_citizenship" || x.ColumnName == "insured_citizenship" || x.ColumnName == "insurer_birthdate" || x.ColumnName == "insured_birthdate" || x.ColumnName == "insurer_age" || x.ColumnName == "insured_age" || x.ColumnName == "prg_id" || x.ColumnName == "comment").ToList(); List <DataColumn> resultColumns = input.Table.Columns.OfType <DataColumn>().Except(exceptedColumns).ToList(); resultTable.Columns.AddRange(resultColumns.Select(item => new DataColumn(item.ColumnName)).ToArray()); DataRow result = resultTable.NewRow(); //копирование из исходного файла for (int i = 0; i < resultColumns.Count; i++) { result[resultColumns[i].ColumnName] = input[resultColumns[i].ColumnName]; } //добавление контактов if (contacts == 0) { log.Debug(String.Format("Получение контакта страхователя=застрахованный для casenum={2} file={3} - citizenship={0} age={1}" , insurer_citizenship , insurer_age , casenum , file)); DataRow contact = buffer.getContact(insurer_citizenship, !string.IsNullOrEmpty(insurer_birthdate) ? insurer_birthdate : insurer_age, input); if (contact != null) { DataColumn[] columns = contact.Table.Columns.OfType <DataColumn>().ToArray(); for (int i = 0; i < contact.ItemArray.Count(); i++) { resultTable.Columns.Add("insurer_" + columns[i].ColumnName); result["insurer_" + columns[i].ColumnName] = contact.ItemArray[i]; } resultTable.Columns.Remove("insurer_type"); } else { log.Error(String.Format("Ошибка получения контакта для casenum={2} file={3} - citizenship={0} age={1}" , insurer_citizenship , insurer_age , casenum , file)); return(null); } } else if (contacts == 1) { log.Debug(String.Format("Получение контакта страхователя для casenum={2} file={3} - citizenship={0} age={1}" , insurer_citizenship , insurer_age , casenum , file)); DataRow insurer = buffer.getContact(insurer_citizenship, !string.IsNullOrEmpty(insurer_birthdate) ? insurer_birthdate : insurer_age, input); log.Debug(String.Format("Получение контакта застрахованного для casenum={2} file={3} - citizenship={0} age={1}" , insured_citizenship , insured_age , casenum , file)); DataRow insured = buffer.getContact(insured_citizenship, !string.IsNullOrEmpty(insured_birthdate) ? insured_birthdate : insured_age, input); if (insurer != null && insured != null) { DataColumn[] columns = insurer.Table.Columns.OfType <DataColumn>().ToArray(); for (int i = 0; i < insurer.ItemArray.Count(); i++) { resultTable.Columns.Add("insurer_" + columns[i].ColumnName); result["insurer_" + columns[i].ColumnName] = insurer.ItemArray[i]; } resultTable.Columns.Remove("insurer_type"); for (int i = 0; i < insured.ItemArray.Count(); i++) { resultTable.Columns.Add("insured_" + columns[i].ColumnName); result["insured_" + columns[i].ColumnName] = insured.ItemArray[i]; } resultTable.Columns.Remove("insured_type"); } else { log.Error(String.Format("Ошибка получения контактов для casenum={2} file={3} - insurer_citizenship={0} insurer_age={1}, insured_citizenship={4} insured_age={5}" , insurer_citizenship , insurer_age , casenum , file , insured_citizenship , insured_age)); return(null); } } else { log.Error(String.Format("Неверное значение contacts для casenum={0} file{1}" , casenum , file)); return(null); } //добавление выгодопреобретателей if (beneficiars.Length == 1) { int beneficiarsValue = new int(); if (int.TryParse(beneficiars[0], out beneficiarsValue)) { if (beneficiarsValue == 0) { resultTable.Columns.Add("beneficiary_is_inheritor"); result["beneficiary_is_inheritor"] = "Y"; } else if (beneficiarsValue > 0) { resultTable.Columns.Add("beneficiary_is_inheritor"); result["beneficiary_is_inheritor"] = "N"; int[] part = getPartOfInsSum(beneficiarsValue); for (int i = 0; i < beneficiarsValue; i++) { log.Debug(String.Format("Получение выгодопреобретателя для file={2} casenum={3} - citizenship={0} age={1}" , beneficiar_citizenship , beneficiar_age , casenum , file)); DataRow beneficiar = buffer.getBeneficiar(beneficiar_citizenship, beneficiar_age, input); DataColumn[] columns = beneficiar.Table.Columns.OfType <DataColumn>().ToArray(); for (int j = 0; j < beneficiar.ItemArray.Count(); j++) { resultTable.Columns.Add(countPrefixes[i] + columns[j].ColumnName); result[countPrefixes[i] + columns[j].ColumnName] = beneficiar.ItemArray[j]; } resultTable.Columns.Add(countPrefixes[i] + "beneficiary_part_of_ins_sum"); result[countPrefixes[i] + "beneficiary_part_of_ins_sum"] = part[i]; } } resultTable.Columns.Add("beneficiaries_counter"); result["beneficiaries_counter"] = beneficiarsValue; } else { log.Error(String.Format("Неверное значение beneficiar для casenum={0} file={1}" , casenum , file)); return(null); } } else if (beneficiars.Length == 2) { /*реализовать позже*/ } else { log.Error(String.Format("Неверное значение beneficiar для casenum={0} file={1}" , casenum , file)); return(null); } return(result); }