OleDb / DataTable到Model

时间:2016-03-27 12:50:16

标签: c# asp.net datatable asp.net-mvc-5 oledb

必须从服务器上的mdb文件中提取数据。我可以打开并访问数据。现在我必须将它映射到模型,我不知道如何接收数据作为模型。我的想法是遍历收到的DataTabel数据并将其分配给模型类型的值:

OleDbCommand command = new OleDbCommand(sqlcommand, DbConnection);
adapter = new OleDbDataAdapter(command);
builder = new OleDbCommandBuilder(adapter);
dt = new DataTable();
try
{
   DbConnection.Open();
   adapter.Fill(dt);

   foreach (DataRow row in dt.Rows)
   {
      var examplemodel= new exampleModel(
         Id = row.ItemArray[0],
         ...
      );
   }
}
catch (Exception ex)
{
}
finally
{
   DbConnection.Close();
}

这里的问题是我不能将row.ItemArray [x]指定为模型的元素,因为row.ItemArray [x]的类型为object,我无法将其转换为int字符串或其他任何内容。 此外,我认为可能有一个更简单,更清洁的方法来解决这个问题。 任何想法或建议都非常感谢。

2 个答案:

答案 0 :(得分:1)

我更喜欢简单的Project -Dockerfile -src -serving (unchanged repo of tensorflow serving) -WORKSPACE -tesnsorflow-serving -... -... -face_ver -model_train.py -... -... 。无论采用何种方法,如果我们使用列名称而不是 index ,它会非常干净和安全。

你可以做类似的事情。

Linq

答案 1 :(得分:1)

您可以使用此

var Entity=(from DataRow dataRow in data.Rows select YourEntity<exampleModel>(dataRow)).ToList();

帮手类

 public static T YourEntity<T>(DataRow row) where T : new()
            {
                var entity = new T();
                var properties = typeof(T).GetProperties();

                foreach (var property in properties)
                {
                    //Get the description attribute
                    var descriptionAttribute = (DescriptionAttribute)property.GetCustomAttributes(typeof(DescriptionAttribute), true).SingleOrDefault();
                    if (descriptionAttribute == null)
                        continue;

                    property.SetValue(entity, row[descriptionAttribute.Description]);
                }

                return entity;
            }

并使用适当的数据表头

装饰实体
 public class exampleModel
{
....
[Description("Subentity_datatable_header_header")]
        public string Subentity { get; set; }
....

}