����λ�ã���ҳ > �����̳� > �̳� > ʵ�ֶ��󼯺���DataTable���໥ת��
������󼯺���DataTable�໥ת������������ת���󼯺���У�����͡�������Ӧ��������ṹ�帳ֵ���⣻���󼯺�ת����һά����ת��������ת�õķ�����ʾ�����룬����Դ�����ϴ���
����ϻأ����ǽ����������ʵ�ֶ��󼯺���DataTable���໥ת����
01���ѱ���ת��Ϊ���󼯺�
�÷����ǽ��������������Ϊ������������������������תΪ��Ķ��󡣴Ӷ�ʵ�ֱ���ת��Ϊ���󼯺ϡ�ͬʱ����Լ������������������DescriptionAttribute���ԣ�������ֵ�ͱ�������һһ��Ӧ�����û������������ȡ�������ƺ�����һһ��Ӧ��
ͬʱ������ҪԼ����ֻ��Ϊ�ṹ����࣬��������ö�١��������͡��Լ��������͡�ί�С��ӿڵȡ�
�������У��ɹ������ǻ���ҪУ������Ƿ���ת��Ϊ���󣬼��жϱ�������������������ƻ���Description����ֵ�Ƿ����һ�£����û��һ��������������������ܶ�Ӧ�ϣ��򱨱��������޷�ӳ�����������ԣ��޷����ת���쳣��
����ЩУ��ɹ��󣬿�ʼÑ�����������м�¼����ÿһ�ж�ת��Ϊһ������
���ǿ���ͨ�����䶯̬ʵ����������ͨ������Զ�������Զ�̬��ֵ����Ϊ���ǵĶ���֧����Ҳ֧�ֽṹ�壬���������ͻ�����һ���������⣬������property.SetValue������û�а취���ṹ�嶯̬��ֵ��
������Ϊ�ṹ����ֵ���ͣ���property.SetValue�����IJ�������object�������������漰��װ����䣬���SetValue��������װ���Ժ�Ķ��󣬶������ܸı�Ô����
������취�����Ȱѽṹ�帳ֵ��object������Ȼ���object��������SetValue����ֵ������ٰ�object����תΪ�ṹ�塣
��������һ�𿴿�����ʵ�ִ��룺
//�ѱ���ת��Ϊ���󼯺�
//�������DescriptionAttribute��������ֵ��Ϊ�����������
//�����������������������
public static IEnumerable ToModels(DataTable dataTable)
{
//T�����ǽṹ����࣬���Ҳ����Ǽ�������
AssertTypeValid();
if (0 == dataTable.Rows.Count)
{
return [];
}
//��ȡT���п�д������
var properties = typeof(T).GetProperties().Where(u => u.CanWrite);
//У������Ƿ���ת��Ϊ����
var isCanParse = IsCanMapDataTableToModel(dataTable, properties);
if (!isCanParse)
{
throw new NotSupportedException("The column name of the table cannot be mapped to an object property, and the conversion cannot be completed.");
}
var models = new List();
foreach (DataRow dr in dataTable.Rows)
{
//ͨ������ʵ����T
var model = Activator.CreateInstance();
//��������ӳ�䵽������
if (typeof(T).IsClass)
{
//����T������
MapRowToModel(dr, model, properties);
}
else
{
//����TΪ�ṹ������
object boxed = model!;
MapRowToModel
���������򵥵ĵ�Ԫ���ԣ�
[Fact]
public void ToModels()
{
//��֤�������
var table = TableHelper.Create>();
var row1 = table.NewRow();
row1[0] = "Id-11";
row1[1] = "����-12";
row1[2] = 33.13;
table.Rows.Add(row1);
var row2 = table.NewRow();
row2[0] = "Id-21";
row2[1] = "����-22";
row2[2] = 33.23;
table.Rows.Add(row2);
var students = TableHelper.ToModels>(table);
Assert.Equal(2, students.Count());
Assert.Equal("Id-11", students.ElementAt(0).Id);
Assert.Equal("����-12", students.ElementAt(0).Name);
Assert.Equal(33.13, students.ElementAt(0).Age);
Assert.Equal("Id-21", students.ElementAt(1).Id);
Assert.Equal("����-22", students.ElementAt(1).Name);
Assert.Equal(33.23, students.ElementAt(1).Age);
}
02���Ѷ��󼯺�ת��Ϊ����
�÷������Ȼ���ø��ݶ��󴴽����ñ·½·ï¿½ï¿½Ãµï¿½Ò»ï¿½ï¿½ï¿½Õ°×±ï¿½ï¿½ï¿½È»ï¿½ï¿½Í¨ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½È¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô£ï¿½È»ï¿½ï¿½Ñ���������󼯺ϣ���һ���������������ֵһ��һ�������е��������У������������һ������ӳ��ɱ���һ�м�¼��ֱ�����ж���ת����ɼ��ɵõ�һ������
�������£�
//�Ѷ��󼯺�תΪ����
//�������DescriptionAttribute��������ֵ��Ϊ�����������
//�����������������������
public static DataTable ToDataTable(IEnumerable models, string? tableName = null)
{
//��������
var dataTable = Create(tableName);
if (models == null || !models.Any())
{
return dataTable;
}
//��ȡ��������
var properties = typeof(T).GetProperties().Where(u => u.CanRead);
foreach (var model in models)
{
//������
var dataRow = dataTable.NewRow();
foreach (var property in properties)
{
//�������Ի�ȡ����
var columnName = GetColumnName(property);
//���������
dataRow[columnName] = property.GetValue(model);
}
dataTable.Rows.Add(dataRow);
}
return dataTable;
}
�������µ�Ԫ���ԣ�
[Fact]
public void ToDataTable()
{
//��֤�������
var students = new List>();
var student1 = new Student
{
Id = "Id-11",
Name = "����-12",
Age = 33.13
};
students.Add(student1);
var student2 = new Student
{
Id = "Id-21",
Name = "����-22",
Age = 33.23
};
students.Add(student2);
var table = TableHelper.ToDataTable>(students, "ѧ����");
Assert.Equal("ѧ����", table.TableName);
Assert.Equal(2, table.Rows.Count);
Assert.Equal("Id-11", table.Rows[0][0]);
Assert.Equal("����-12", table.Rows[0][1]);
Assert.Equal("33.13", table.Rows[0][2].ToString());
Assert.Equal("Id-21", table.Rows[1][0]);
Assert.Equal("����-22", table.Rows[1][1]);
Assert.Equal("33.23", table.Rows[1][2].ToString());
}
03����һά������Ϊһ��ת��Ϊ����
�÷����Ƚϼ򵥾��ǰ�һ��һά������Ϊһ�����ݴ���һ�ű���ͬʱ����ѡ���Ƿ���д����������������������£�
//��һά������Ϊһ��ת��Ϊ����
public static DataTable ToDataTableWithColumnArray(TColumn[] array, string? tableName = null, string? columnName = null)
{
var dataTable = new DataTable(tableName);
//������
dataTable.Columns.Add(columnName, typeof(TColumn));
//����������
foreach (var item in array)
{
var dataRow = dataTable.NewRow();
dataRow[0] = item;
dataTable.Rows.Add(dataRow);
}
return dataTable;
}
��Ԫ�������£�
[Fact]
public void ToDataTableWithColumnArray()
{
//��֤�������
var columns = new string[] { "A", "B" };
var table = TableHelper.ToDataTableWithColumnArray(columns, "ѧ����");
Assert.Equal("ѧ����", table.TableName);
Assert.Equal("Column1", table.Columns[0].ColumnName);
Assert.Equal(2, table.Rows.Count);
Assert.Equal("A", table.Rows[0][0]);
Assert.Equal("B", table.Rows[1][0]);
table = TableHelper.ToDataTableWithColumnArray(columns, "ѧ����", "��");
Assert.Equal("��", table.Columns[0].ColumnName);
}
04����һά������Ϊһ��ת��Ϊ����
�÷���Ҳ�Ƚϼ򵥾��ǰ�һ��һά������Ϊһ�����ݴ���һ�ű���ͬʱ����ѡ���Ƿ���д����������������£�
//��һά������Ϊһ��ת��Ϊ����
public static DataTable ToDataTableWithRowArray(TRow[] array, string? tableName = null)
{
var dataTable = new DataTable(tableName);
//������
for (var i = 0; i < array.Length; i++)
{
dataTable.Columns.Add(null, typeof(TRow));
}
//����������
var dataRow = dataTable.NewRow();
for (var i = 0; i < array.Length; i++)
{
dataRow[i] = array[i];
}
dataTable.Rows.Add(dataRow);
return dataTable;
}
05������ת��
�÷�����ָ��DataTable�е��к��л����������е����ݱ���У��е����ݱ���С�����ͼʾ����
���ʾ��ת������һ��������������û����Ϊ���ݽ���ת����������ǻ��ṩһ����ѡ���������ָʾҪ��Ҫ����Ŀ��Ϊ���ݽ���ת����
��������ʵ���߼�Ҳ�ܼòµ¥£ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ô��������Ϊ��������һ���±���Ȼ����Ñ������Ô����������Ô����һ������������±����һ�������У�ֱ��Ô���������д���������������ת�á�����������£�
//����ת��
public static DataTable Transpose(DataTable dataTable, bool isColumnNameAsData = true)
{
var transposed = new DataTable(dataTable.TableName);
//���������Ϊ���ݣ�����Ҫ���һ��
if (isColumnNameAsData)
{
transposed.Columns.Add();
}
//ת�ú�������Ϊ�µ�����
for (int i = 0; i < dataTable.Rows.Count; i++)
{
transposed.Columns.Add();
}
//����Ϊ��λ��һ�δ���һ������
for (var column = 0; column < dataTable.Columns.Count; column++)
{
//��������
var newRow = transposed.NewRow();
//���������Ϊ���ݣ����Ȱ����������һ��
if (isColumnNameAsData)
{
newRow[0] = dataTable.Columns[column].ColumnName;
}
//��һ������תΪһ������
for (var row = 0; row < dataTable.Rows.Count; row++)
{
//���������Ϊ���ݣ��������ݴӵڶ��п�ʼ���
var rowIndex = isColumnNameAsData ? row + 1 : row;
newRow[rowIndex] = dataTable.Rows[row][column];
}
transposed.Rows.Add(newRow);
}
return transposed;
}
������м򵥵ĵ�Ԫ���ԣ�
[Fact]
public void Transpose_ColumnNameAsData()
{
DataTable originalTable = new DataTable("����");
originalTable.Columns.Add("A", typeof(string));
originalTable.Columns.Add("B", typeof(int));
originalTable.Columns.Add("C", typeof(int));
originalTable.Rows.Add("D", 1, 2);
//������Ϊ���ݵ����
var table = TableHelper.Transpose(originalTable, true);
Assert.Equal(originalTable.TableName, table.TableName);
Assert.Equal("Column1", table.Columns[0].ColumnName);
Assert.Equal("Column2", table.Columns[1].ColumnName);
Assert.Equal(3, table.Rows.Count);
Assert.Equal("A", table.Rows[0][0]);
Assert.Equal("D", table.Rows[0][1]);
Assert.Equal("B", table.Rows[1][0]);
Assert.Equal("1", table.Rows[1][1].ToString());
Assert.Equal("C", table.Rows[2][0]);
Assert.Equal("2", table.Rows[2][1].ToString());
}
ע �����Է��������Լ�ʾ��Դ�붼�Ѿ��ϴ�������⣬����Ȥ�Ŀ��Կ����� https://gitee.com/hugogoos/Ideal
С���Ƽ��Ķ�ʹ��Blender���ɳ���ģ��
�Ķ�ȫ����������ERA5�����ط���
�Ķ�Xpath���������﷨
�Ķ�����ѧϰ�������繹�����£�
�Ķ���ΪMateƷ��ʢ�䣺HarmonyOS NEXT�ӳ�����Ϸ���ܵõ�����ͷ�
�Ķ�ʵ�ֶ��󼯺���DataTable���໥ת��
�Ķ�Ӳ�̵Ļ���֪ʶ��ѡ��ָ��
�Ķ�������й��ƶ��ı�ͼ��ײ�
�Ķ�����NEXTԪ�����������ѿ����ϼ���Ʒ
�Ķ��ᳲ���С������������Ƽ��رշ���
�Ķ������ArcMap�����н���դ��ͼ���ز�������
�Ķ��㷨�����ݽṹ 1 - ģ��
�Ķ���Ѷ�����߿ͷ���Ӫ��ϵͳ����
�Ķ���Ѷ��Ƶҹ��ģʽ���ý̳�
�Ķ����ں���NEXT��Ѫ���Ŵ���������������
�Ķ�5. Spring Cloud OpenFeign ����ʽ WebService �ͻ��˵ij���ϸʹ��
�Ķ�Java����ģʽ����̬�����Ͷ�̬�����ĶԱȷ���
�Ķ�Win11�ʼDZ����Զ�����Ӧ�õ���ɫ����ʾ����
�Ķ�˼�� V1.5.6 ��׿��
��ս�귨 V7.5.0 ��׿��
У��������������׵������� V1.0 ��׿��
��˸֮�� V1.9.7 ��׿��
������Ե����� v1.0.4 ��׿��
������֮ŠV5.2.3 ��׿��
��������������Դ V1.0 ��׿��
���֮Ϣ V1.0 ��׿��
��ħ������������䣩 V1.0 ��׿��
���ں�������ϵ�����������������վ�����������������Ƽ�����
Ƶ�� ����Ƶ��������ר������������׿�������app����
�Ƽ� ��Ô���������°��������ܿ������ز���
���� ����ɫ������������ ���������ս������������
ɨ��ά�����������ֻ��汾��
ɨ��ά����������΢�Ź��ںţ�
��վ�������������������ϴ��������ַ���İ�Ȩ���뷢�ʼ�[email protected]
��ICP��2022002427��-10 �湫��������43070202000427��© 2013~2025 haote.com ������