| | |
| | | } |
| | | if (excelTable[i].Columns.Cast<DataColumn>().Any(column => column.ColumnName.Contains("M"))) |
| | | { |
| | | var duplicateColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault( |
| | | column => column.ColumnName.Contains("M") && excelTable[i].AsEnumerable().GroupBy(row => new { Field1 = row[column], Field2 = column.ColumnName.Contains("唯一") }).Any(group => group.Count() > 1)); |
| | | if (duplicateColumn != null) |
| | | // 先按照列名包含"M"标识的列分组 |
| | | var mColumns = excelTable[i].Columns.Cast<DataColumn>() |
| | | .Where(c => c.ColumnName.Contains("M")) |
| | | .ToList(); |
| | | |
| | | var groups = excelTable[i].AsEnumerable() |
| | | .GroupBy(r => string.Join("-", mColumns.Select(c => r[c]))); |
| | | |
| | | foreach (var group in groups) |
| | | { |
| | | int columnIndex = excelTable[i].Columns.IndexOf(duplicateColumn); |
| | | var duplicateRows = excelTable[i].AsEnumerable() |
| | | .Where(row => row[duplicateColumn] != DBNull.Value) |
| | | .GroupBy(row => row[duplicateColumn]) |
| | | .Where(group => group.Count() > 1) |
| | | .SelectMany(group => group.ToList()) |
| | | .ToList(); |
| | | foreach (var row in duplicateRows) |
| | | // 判断列名包含"唯一"标识的列的列值是否重复 |
| | | var uniqueColumnName = excelTable[i].Columns.Cast<DataColumn>() |
| | | .Where(c => c.ColumnName.Contains("唯一")) |
| | | .Select(c => c.ColumnName) |
| | | .FirstOrDefault(); |
| | | |
| | | var duplicateUniqueValues = group |
| | | .GroupBy(r => r[uniqueColumnName]) |
| | | .Where(g => g.Count() > 1) |
| | | .Select(g => g.Key); |
| | | |
| | | foreach (var value in duplicateUniqueValues) |
| | | { |
| | | ExcelErro erro = new ExcelErro(); |
| | | erro.RoeNumber = excelTable[i].Rows.IndexOf(row).ToString(); |
| | | erro.ErrorField = duplicateColumn.ColumnName; |
| | | erro.ErrorCont = "模板表头字段:" + duplicateColumn.ColumnName + "下同一值,对应带(唯一)的列中存在重复值"; |
| | | erro.RoeNumber = "/"; |
| | | erro.ErrorField = mColumns[0].ToString(); |
| | | erro.ErrorCont = "模板表头字段【"+ mColumns[0].ToString() + "】下的值:"+ group.Key + ",对应带(唯一)的列中存在重复值为:"+value+""; |
| | | list.Add(erro); |
| | | |
| | | } |
| | | } |
| | | } |
| | | else |
| | | else |
| | | { |
| | | var duplicateColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault( |
| | | column => column.ColumnName.Contains("唯一") && excelTable[i].AsEnumerable().GroupBy(row => row[column]).Any(group => group.Count() > 1)); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | return list; |
| | | } |