用于Unpivoting DataTable的Lambdaexpression式
我正在阅读Excel格式的数据,格式如下:
我需要按以下方式存储数据 –
我试图用Linq lambdaexpression式的帮助来做到这一点,但我想我没有得到任何与此。
我试过 –
DataTable dataTable= ReadExcel(); var dt = dataTable.AsEnumerable(); var resultSet = dt.Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code"))) .GroupBy(x => new { Month = x.Field<String>("Month"), ProjectCode = x.Field<String>("Project_Code"), //change designation columns into row data and then group on it //Designation = } ); //.Select(p => // new // { // Month= pd // } // );`
我将使用ToDictionary和一组预定义的名称:
private static readonly string[] designationNames = {"PA","A","SA","M","SM","CON"}; void Function() { /* ... */ var resultSet = dt.AsEnumerable().Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code"))) .Select(x => new { Month = x.Field<String>("Month"), ProjectCode = x.Field<String>("Project_Code"), Designations = designationNames.ToDictionary(d => d, d => x.Field<int>(d)) } ); }
这是规范化的版本。 如果你想要它平坦,使用:
private static readonly string[] designationNames = {"PA","A","SA","M","SM","CON"}; void Function() { /* ... */ var resultSet = dt.AsEnumerable().Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code"))) .Select(x => designationNames.Select( d => new { Month = x.Field<String>("Month"), ProjectCode = x.Field<String>("Project_Code"), Designation = d, Count = x.Field<int>(d) } ) ).SelectMany(x => x).ToList(); }
如果types不总是int,那么您可能需要使用x.Field<String>(d)
并检查其有效性。
- 工作表名称不能为空
- HRESULTexception:0x800A03EC保存Excel文件时出错
- 将excel文件合并到项目目录wpf c#
- 如何使用c#在asp.net中创build一个excel文件时指定path和文件名?
- C#:从Excel公式读取值
- 当调用AddIns.Item 时,索引无效(从HRESULTexception:0x8002000B(DISP_E_BADINDEX)))
- Epplus:如何将样式从Excel样式库应用到ExcelRange
- 在ASP.NET的64位Windows平台上将Excel文件导入SQL Server的最佳方法是什么?
- 具有#N / A值的Excel图表,通过C#