将ExpandoObjects鞋拔成网格,就像下面的两次尝试一样.
这不起作用:
var data = _d.Query<dynamic>(_script); // returns IEnumerable<ExpandoObject> IDictionary<string,object> c = (IDictionary<string,object>)data.FirstOrDefault(); DataTable dt = new DataTable(); dt.BeginLoadData(); dt.Columns.AddRange(c.Keys.Select(k => new DataColumn(k)).ToArray()); data.Select(r => dt.Rows.Add((r as IDictionary<string,object>).Values.ToArray())); dt.EndLoadData();
但这样做:
dt.Columns.AddRange(c.Keys.Select(k => new DataColumn(k)).ToArray()); foreach (IDictionary<string,object> r in data) dt.Rows.Add(r.Values.ToArray());
为什么?
解决方法
选择方法
The query represented by this method is not executed until the object
is enumerated either by calling its GetEnumerator method directly or
by using foreach in Visual C# or For Each in Visual Basic.
所以这个选择永远不会执行:
data.Select(r => dt.Rows.Add((r as IDictionary<string,object>).Values.ToArray()));