将对象扩展到数据表

NKD*_*NKD 2 c# datatable converter expandoobject

我是新的 ExpandoObject(确实,我昨天才知道)。我有以下代码,想知道是否有某种方法可以将 ExpandoObject 转换为我不知道的 DataTable?或者我必须使用反射来自己转换它?

dynamic contacts = new List<dynamic>();

contacts.Add(new ExpandoObject());
contacts[0].Name = "Patrick Hines";
contacts[0].Phone = "206-555-0144";

contacts.Add(new ExpandoObject());
contacts[1].Name = "Ellen Adams";
contacts[1].Phone = "206-555-0155";
Run Code Online (Sandbox Code Playgroud)

NKD*_*NKD 6

这是我必须转换的内容。但是如果有人有更好的方法,请告诉我。

    public DataTable ToDataTable(IEnumerable<dynamic> items)
    {
        var data = items.ToArray();
        if (data.Count() == 0) return null;

        var dt = new DataTable();
        foreach (var key in ((IDictionary<string, object>)data[0]).Keys)
        {
            dt.Columns.Add(key);
        }
        foreach (var d in data)
        {
            dt.Rows.Add(((IDictionary<string, object>)d).Values.ToArray());
        }
        return dt;
    }
Run Code Online (Sandbox Code Playgroud)