c# - 将 DataTable(动态列)转换为 List<T>

标签 c# linq

我想用下面的示例数据转换 DataTable

Employee subject1 subject2 subject3 .......
1        100      80         60......
2        90       70         70...

进入

列表。

Employee 对象如下..

public class Employee
{
  public int EmpId { get; set;}
  public Dictionary<string,decimal> SubjectMarks;

}

任何人都可以帮助我将这个 Datatable 转换为 C sharp 中的 List 或使用 linq。

最佳答案

因此,动态主题列从索引 1 开始,到 table.Columns-Count-1 结束。然后我会先创建这些列的数组。然后你可以使用Select + ToDictionary + ToList:

DataColumn[] subjectColumns = table.Columns.Cast<DataColumn>().Skip(1).ToArray();
List<Employee> employee = table.AsEnumerable()
    .Select(r => new Employee
    {
        EmpId = r.Field<int>("Employee"),
        SubjectMarks = subjectColumns.Select(c => new
        {
            Subject = c.ColumnName,
            Marks   = r.Field<decimal>(c)
        })
        .ToDictionary(x => x.Subject, x => x.Marks)
    }).ToList();

假设列的类型已经是 int 的 ID 和 decimal 的标记。否则使用 int.Parsedecimal.Parse 来转换它们。

关于c# - 将 DataTable(动态列)转换为 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16208588/

相关文章:

c# - 使用 LINQ 获取接口(interface)类型 [] 上的所有方法?

.net - 为什么 .NET 中的匿名类型被实现为引用类型?

c# - LINQ to Entities 无法识别该方法

c# - 服务器在区域设置中设置为 en-GB,但 DateTime 解析为 en-US

c# - 取消订阅套接字流后取消特定的子线程或任务

c# - IEnumerable.Select 索引

c# - 使用 c# mvc4 阅读 rss 提要

c# - 为什么我们不能在另一个类方法之外使用类方法?

c# - 围绕中心 vector2 点旋转对象

c# - 对象初始值设定项中的只读字段