C# 将垂直数据表转换为C模型
我在Datatable中有一个垂直的值,如下所示C# 将垂直数据表转换为C模型,c#,datatable,C#,Datatable,我在Datatable中有一个垂直的值,如下所示 var listOfEmployees = new List<Employee>(); listOfEmployees.Add(new Employee{ Id=221, Salary=10000, Age=31 }); listOfEmployees.Add(new Employee{ Id=222, Age=31 }); 我需要把它转换成这样的对象列表 var listOfEmployees = new Lis
var listOfEmployees = new List<Employee>();
listOfEmployees.Add(new Employee{
Id=221, Salary=10000, Age=31
});
listOfEmployees.Add(new Employee{
Id=222, Age=31
});
我需要把它转换成这样的对象列表
var listOfEmployees = new List<Employee>();
listOfEmployees.Add(new Employee{
Id=221, Salary=10000, Age=31
});
listOfEmployees.Add(new Employee{
Id=222, Age=31
});
我所做的
DataTable dTable = new DataTable();
for (int i = 0; i < dTable.Columns.Count; i++)
{
for (int j = 0; j < dTable.Rows.Count; j++)
{
var value = dTable.Rows[j][i];
// for Primary Key Check if exist in list
// Match Column Name
// Fill Value
}
}
但是我想不出适合它的逻辑你可以使用这个列表对象,也可以匿名使用
var listOfEmployees = new List<Employee>();
listOfEmployees = (from DataRow dr in dt.Rows
select new Employee()
{
Id = dr["PrimaryKey"],
Salary = dr["Salary"].ToString(),
Age = dr["Age"].ToString(),
}).ToList();
型号:
数据:
LINQ代码:
var employees = dataTable.AsEnumerable()
.GroupBy(
row => row.Field<int>("Primary Key"),
row => new { ColumnName = row.Field<string>("Column Name"), Value = row["Value"] }
)
.Select(g => new Employee
{
Id = g.Key,
Salary = Convert.ToDecimal(g.FirstOrDefault(x => x.ColumnName == "Salary")?.Value),
Age = Convert.ToInt32(g.FirstOrDefault(x => x.ColumnName == "Age")?.Value),
Department = g.FirstOrDefault(x => x.ColumnName == "Department")?.Value.ToString()
})
.ToList();
在列名中,我们需要找到列,它的实际值将在值中。我相信这完全回答了您的问题。在列名中,我们将得到不同的属性,即薪资部门age@VishalPandey啊,更新了答案,实现这一点的简单方法。这些东西和其他语法有点混淆。表中没有薪水和年龄列。这是错误的答案。
var employees = dataTable.AsEnumerable()
.GroupBy(
row => row.Field<int>("Primary Key"),
row => new { ColumnName = row.Field<string>("Column Name"), Value = row["Value"] }
)
.Select(g => new Employee
{
Id = g.Key,
Salary = Convert.ToDecimal(g.FirstOrDefault(x => x.ColumnName == "Salary")?.Value),
Age = Convert.ToInt32(g.FirstOrDefault(x => x.ColumnName == "Age")?.Value),
Department = g.FirstOrDefault(x => x.ColumnName == "Department")?.Value.ToString()
})
.ToList();