如何在c#中将List <dynamic>转换为List <OurClass>

Din*_*esh 6 c# asp.net

我在运行时创建动态列表,执行后我需要将列表分配给我的类属性

List<tblchargemaster> charge = new List<tblchargemaster>();

charge = (List<tblchargemaster>) ObjDB.SelectQuery("tblchargemaster");
Run Code Online (Sandbox Code Playgroud)

tblchargemaster是类类型和SelectQuery函数返回List<dynamic>.如何将此动态列表转换为具有类类型的列表?

     public List<dynamic> SelectQuert(string TableName)
    {
        Conn.Open();

        DataTable dt = new DataTable("map");

        string Query = "Select * from " + TableName;            
        MySqlDataAdapter dr = new MySqlDataAdapter(Query, Conn);
        dr.Fill(dt);

        List<dynamic> dynamicDt = dt.ToDynamic();

        Conn.Close();

        return dynamicDt;
    }
Run Code Online (Sandbox Code Playgroud)

和通用类是

    public static class DataTableExtensions
{
    public static List<dynamic> ToDynamic(this DataTable dt)
    {
        var dynamicDt = new List<dynamic>();
        foreach (DataRow row in dt.Rows)
        {
            dynamic dyn = new ExpandoObject();
            foreach (DataColumn column in dt.Columns)
            {
                var dic = (IDictionary<string, object>)dyn;
                dic[column.ColumnName] = row[column];
                dynamicDt.Add(dyn);
            }
        }
        return dynamicDt;
    }
}
Run Code Online (Sandbox Code Playgroud)

chi*_*oro 7

编辑,因为不支持从动态到强类型的显式强制转换.

var charge = ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>();
Run Code Online (Sandbox Code Playgroud)

变为:

var charge = ObjDB.SelectQuert("tblchargemaster").Select(CastDynamicTo<tblchargemaster>)
Run Code Online (Sandbox Code Playgroud)

而是CastDynamicTo<tblchargemaster>通过帮助实现是否有办法将动态或匿名对象转换为强类型的声明对象?