使用可选列号从数据表中创build对象列表

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

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

我得到了一个DataTable已经填充的列名基于上传的Excel文件。 我已经提前创build了一个有10个属性的class

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

现在我想实现的是从DataTable创build一个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列

您可以检查某个列是否存在,然后从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();