【问题标题】:How to convert List<dynamic> to List<OurClass> in c#如何在 C# 中将 List<dynamic> 转换为 List<OurClass>
【发布时间】:2014-05-13 19:17:06
【问题描述】:

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

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

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

tblchargemaster 是类类型,SelectQuery 函数返回 List&lt;dynamic&gt;。如何将此动态列表转换为具有我的类类型的列表?

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

【问题讨论】:

  • 正如我在回答的讨论中提到的,这归结为如何将动态转换为tblchargemaster。一旦您可以对一个对象执行此操作,您也可以对多个对象执行此操作。
  • 我更新了我的问题朋友请帮助我。 . .
  • 我发布了一个指向 Stackoverflow 问答的链接,可以回答您的问题。你读了吗?
  • 是的,但这就是js序列化对我的帮助

标签: c# asp.net


【解决方案1】:

已编辑,因为不支持从动态类型显式转换为强类型。

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

变成:

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

CastDynamicTo&lt;tblchargemaster&gt; 是在Is there a way to convert a dynamic or anonymous object to a strongly typed, declared object? 的帮助下实现的

【讨论】:

  • 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员表?)
  • 最后调用ToList()方法
  • @Dinesh:看起来你没有 1:1 复制我的代码。如果您真的想将charge 显式键入为List&lt;..&gt;,则需要在.Cast&lt;...&gt; 之后附加.ToList()
  • @Dinesh 你能改写一下吗?
  • 我再次收到错误消息(无法将“System.Dynamic.ExpandoObject”类型的对象转换为“Sports.Models.tblchargemaster”类型。)
【解决方案2】:

使用Cast&lt;tblchargemaster&gt;()方法:

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

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

【讨论】:

  • 无法将类型 'void' 隐式转换为 'System.Collections.Generic.List 这样的错误
猜你喜欢
  • 1970-01-01
  • 2021-05-20
  • 2020-09-04
  • 1970-01-01
  • 2021-05-27
  • 2021-03-29
  • 2020-05-23
  • 2016-07-18
  • 1970-01-01
相关资源
最近更新 更多