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

将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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...