为了将 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()));
关于c# - 为什么 LINQ 无法将 DataRows 添加到 DataTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8155179/