#pragma warning disable CA1822 // Mark members as static public DbDataReader UnpivotAsDataReader(object dataSource, string[] primaryColumns, string unpivotColumnName, Type unpivotColumnType, #pragma warning restore CA1822 // Mark members as static string unpivotValueColumnName, Type unpivotValueType, UnpivotOptions options = null) { options ??= new UnpivotOptions(); if (primaryColumns == null || primaryColumns.Length <= 0) { throw new ArgumentNullException(nameof(primaryColumns)); } if (string.IsNullOrWhiteSpace(unpivotColumnName)) { throw new ArgumentNullException(nameof(unpivotColumnName)); } if (string.IsNullOrWhiteSpace(unpivotValueColumnName)) { throw new ArgumentException(nameof(unpivotValueColumnName)); } if (unpivotValueType == null) { throw new ArgumentNullException(nameof(unpivotValueType)); } var reader = ScriptHostObject.GetDataSourceReader(dataSource, new DataSourceParameters() { IgnoreErrors = options.IgnoreErrors, Columns = options.SelectColumns, SkipColumns = options.SkipColumns }); if (reader == null) { throw new Exception("Input data are not provided."); } try { var readerParameters = new UnpivotDataReader.Parameters() { DataSource = reader, PrimaryColumns = primaryColumns, IgnoreColumns = options.IgnoreColumns, IgnoreErrors = options.IgnoreErrors, UnPivotColumnName = unpivotColumnName, UnpivotColumnType = unpivotColumnType, UnPivotValueColumnName = unpivotValueColumnName, UnPivotValueType = unpivotValueType, SkipValues = options.SkipValues }; var result = new UnpivotDataReader(readerParameters); return(result); } catch (Exception) { reader.Close(); reader.Dispose(); throw; } }
public DataTable Unpivot(object dataSource, string[] primaryColumns, string unpivotColumnName, Type unpivotColumnType, string unpivotValueColumnName, Type unpivotValueType, UnpivotOptions options = null) { using var reader = UnpivotAsDataReader(dataSource, primaryColumns, unpivotColumnName, unpivotColumnType, unpivotValueColumnName, unpivotValueType, options); var tblResult = new DataTable("UnpivotData"); tblResult.Load(reader); reader.Close(); return(tblResult); }