我有一个服务,该服务当前使用这种结构返回System.DataTable:附数据表
我需要将这种类型的结构转换成如下所示的模型:
[Required]
public string Field { get; set; }
[Required]
[StringLength(500)]
public string Identifier { get; set; }
public string? FieldValue { get; set; }最后一个模型是数据库模型。我目前正在通过datatable记录进行迭代。在1000到10000条记录中可以正常工作,但是当解析100000和更多记录时,它会变得很慢。如果我能够将datatable结构大容量地放到数据库中,那将是很棒的,但是字段列会发生变化,这会使它变得更加复杂。
此外,如果需要而不是DataFrame,我可以返回DataTable。我认为转换DataFrame比较容易,但这里要注意的是,标识符列需要保留,而不是被转换为字段列。
发布于 2022-09-03 16:53:10
您可以创建一个扩展方法,并像下面这样使用,但不确定性能
//dt object of Datatable
var entities = dt.Transpose("SECURITIES");
public static class DataTableTranspose
{
public static IList<MyEntity> Transpose(this DataTable dataTable, string indentifierColumn)
{
var entities = new List<MyEntity>();
if (dataTable is null || dataTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(indentifierColumn))
return entities;
for (int i = 0; i < dataTable.Rows.Count; i++)
{
var entity = new MyEntity()
{
Identifier = dataTable.Rows[i][indentifierColumn].ToString()
};
for (int j = 0; j < dataTable.Columns.Count; j++)
{
if (dataTable.Columns[j].ColumnName != indentifierColumn)
{
entity.Field = dataTable.Columns[j].ColumnName;
entity.FieldValue = dataTable.Rows[i][j].ToString();
}
}
entities.Add(entity);
}
return entities;
}
public class MyEntity
{
public string Field { get; set; }
public string Identifier { get; set; }
public string? FieldValue { get; set; }
}https://stackoverflow.com/questions/73582124
复制相似问题