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

11
我在运行时创建了一个动态列表,执行后我需要将该列表分配给我的类属性。
List<tblchargemaster> charge = new List<tblchargemaster>();

charge = (List<tblchargemaster>) ObjDB.SelectQuery("tblchargemaster");

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;
    }

泛型类是什么?

    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;
    }
}

我更新了我的问题,朋友,请帮帮我。 - Dinesh
是的,但那是JS序列化,它如何帮助我? - Dinesh
请帮帮我,朋友们。 - Dinesh
你没有仔细阅读我的链接。 - chiccodoro
显示剩余3条评论
2个回答

8

进行显式转换,将动态类型转换为强类型的操作是不被支持的。

var charge = ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>();

成为:

var charge = ObjDB.SelectQuert("tblchargemaster").Select(CastDynamicTo<tblchargemaster>)

CastDynamicTo<tblchargemaster> 则通过帮助将动态或匿名对象转换为强类型、声明对象的方式来实现。


无法隐式转换类型'System.Collections.Generic.IEnumerable<Sports.Models.tblchargemaster>'到'System.Collections.Generic.List<Sports.Models.tblchargemaster>'。存在显式转换(是否缺少强制转换?)。 - Dinesh
1
在最后调用ToList()方法。 - Vladimir Sachek
@Dinesh:看起来你没有直接复制我的代码 1:1。如果你真的想将你的charge明确地声明为List<...>,你需要在.Cast<...>之后添加一个.ToList() - chiccodoro
@Dinesh 你能换个说法吗? - chiccodoro
我再次收到错误消息,内容为(无法将类型为'System.Dynamic.ExpandoObject'的对象转换为类型'Sports.Models.tblchargemaster')。 - Dinesh
显示剩余2条评论

1
使用Cast<tblchargemaster>()方法:
List<tblchargemaster> charge = new List<tblchargemaster>();

charge = charge.AddRange(
   ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>());

无法隐式转换类型“void”为“System.Collections.Generic.List<Sports.Models.tblchargemaster>”,会出现此类错误。 - Dinesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接