c# - 为什么 LINQ 无法将 DataRows 添加到 DataTable?

标签 c# linq datatable expandoobject

为了将 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()));

引用 http://msdn.microsoft.com/ru-ru/library/bb548891.aspx

关于c# - 为什么 LINQ 无法将 DataRows 添加到 DataTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8155179/

相关文章:

c# - 查询即将到来的生日

c# - 在 C# 中将 DataTable 记录绑定(bind)或拉取到 MessageBox 文本

c# - 表锁抛出异常 vs 表锁等待结束

c# - 接收.NET : ToTask vs LastAsync vs RunAsync

c# - 如何使用此示例在 Linq 中动态旋转

c# - Select * from TableName 的 Lambda 表达式

c# - 如何将连接两个对象的 LINQ 查询语法转换为方法语法?

java - 如何在Java中实现可通过列名和行号访问的可变大小表?

c# - 如何从其他数据表创建具有列结构的新数据表?

c# - 基于任务的异步与带回调的异步