将WebMatrix.Data.DynamicRecord转换为对象

时间:2017-04-27 12:22:00

标签: c# casting webmatrix

有没有办法将WebMatrix.Data.DynamicRecord转换为对象。我有代码执行sql查询

public IEnumerable<dynamic> ExecuteSelectQuery(string query, params object[] args)
        {
            IEnumerable<dynamic> resultSets = null;
            OpenStore();
            try
            {
                resultSets = db.Query(query, args);
            }
            catch (Exception ex)
            {
                Trace.TraceError("Unable to execute statement: " + query + ", Failed with error:" + ex);
            }
            finally
            {
                CloseStore();
            }
            return resultSets;
        }

现在,如果我将此功能称为

string selectQuery = " SELECT * FROM " + TABLENAME + " WHERE condition = @0 ";
 IEnumerable<dynamic> records= (IEnumerable<dynamic>)dbInstance.ExecuteSelectQuery(selectQuery, cond);

for (int i = 0; i < records.Count(); ++i){
      MyObject obj = (MyOject)records.ElementAt(i);
    //do somethinng
    }

这里将WebMatrix.Data.DynamicRecord(records.ElementAt(i))转换为MyObject会给出异常。 有没有办法将WebMatrix.Data.DynamicRecord转换为MyObject?

1 个答案:

答案 0 :(得分:0)

我认为这不是一种强有力的方式。我建议你让myObject的构造函数获取动态记录。然后在循环中:

MyObject obj = new MyObject( records.ElementAt(i) );

在My Object

的构造函数中
public MyObject( dynamic r)
{
   a = r.a;
   b = r.b;
   // ...

 }

其中a是类的成员,r.a显然来自数据库中的行。虽然这很乏味,但它会起作用。也许有默认值或错误检查或处理在构造函数中也适用的空值。