我正在处理上传excel文件。我把它转换为datatable
如下。
public static DataTable ConvertExcelFileToDataTable(HttpPostedFileBase upload)
{
// ExcelDataReader works with the binary Excel file, so it needs a FileStream
// to get started. This is how we avoid dependencies on ACE or Interop:
Stream stream = upload.InputStream;
IExcelDataReader reader = null;
if (upload.FileName.EndsWith(".xls"))
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (upload.FileName.EndsWith(".xlsx"))
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
reader.IsFirstRowAsColumnNames = true;
DataTable dtProductCatalog = reader.AsDataSet().Tables[0];
reader.Close();
return dtProductCatalog;
}
现在我想创建一个映射器类型的东西,它将包含datatable column
将转换为哪个模型的东西。然后将datatable
转换为相应的模型列表。我不知道如何开始。
答案 0 :(得分:1)
我使用的是模型工厂,负责为您提供所需的型号。然后,您可以将每个模型添加到列表中。
在下面的示例中,我们有一个BaseModel
类,如果需要,它包含所有模型共有的属性。但是有一个可重写的填充方法。然后创建子类,为您拥有的每种模型类型继承基础模型。我刚刚完成Model1
。
public class BaseModel
{
//Common Properties here.
public virtual void PopulateData(DataTable data)
{
//Override
}
}
public class Model1 : BaseModel
{
//Model 1 Properties here.
public string Name { get; set; }
public override void PopulateData(DataTable data)
{
//Set all model values here from datatable.
}
}
public class ModelFactory
{
private BaseModel _model;
public BaseModel ReturnModelByName(string modelName, DataTable dtProductCatalog)
{
switch (modelName)
{
case "Model1":
_model = new Model1();
_model.PopulateData(dtProductCatalog);
break;
case "Model2": //etc....
break;
}
return _model;
}
}
然后使用ModelFactory
类根据模型名称返回所需模型的填充实例。
您可以为每个型号致电工厂。
var modelFactory = new ModelFactory();
var modelList = new List<BaseModel>();
var myModel = modelFactory.ReturnModelForColumn("Model1", dtProductCatalog);
modelList.Add(myModel);
希望指出你正确的方向。