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



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

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

我收到一个DataTable,该已根据上传的 excel 文件填充了列名称。我继续创建了一个具有 10 个属性的class

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

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

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();

最新更新