【问题标题】:Creating a List of objects from datatable with optional column numbers使用可选列号从数据表创建对象列表
【发布时间】:2017-05-19 08:18:40
【问题描述】:

我有一个 MVC Web 应用程序,允许用户上传 Excel 文件。 excel文件具有以下列计数

  • 文件 1 => 10 列(8 列必填,2 列可选)
  • 文件 2 => 8 列(6 列必填,2 列可选)
  • 文件 3 => 6 列(5 列必填,1 列可选)
  • 文件 4 => 4 列(4 列必填,0 列可选)

我收到了一个DataTable,它已根据上传的 excel 文件填充了列名。我已经创建了一个 class,它有 10 个属性:

public class ImportData
{
    public string OpertorName { get; set; }
    public string MachineName { get; set; }
    ....
}

现在我想要实现的是从DataTable 创建一个List<ImportData>。我知道我可以做到以下几点

List<ImportData> imports = dt.AsEnumerable().Select(row => 
new ImportData
{
   OpertorName = row.Field<string>("OPERTOR NAME"),
   MachineName = row.Field<string>("MACHINE NAME")
   ...
   //all 10 properties
}).ToList();

以上内容对File 1 很好,但我如何才能容纳其余文件,因为并非所有文件都将在DataTable 中包含所有10 列

【问题讨论】:

    标签: c# asp.net-mvc excel datatable


    【解决方案1】:

    您可以检查某个列是否存在,然后从DataTable 中获取列值或输入一些默认值。像这样的:

    List<ImportData> imports = dt.AsEnumerable().Select(row => 
    new ImportData
    {
       OpertorName = row.Field<string>("OPERTOR NAME"),
       MachineName = row.Field<string>("MACHINE NAME"),
       SomeOtherProperty = row.Table.Columns.Contains("column_name") ?
           row.Field<string>("column_name") : 
           string.Empty //default value since column_name doesn't exist
       //etc
    }).ToList();
    

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 2016-07-23
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多