0

在以下链接中:http: //msdn.microsoft.com/en-us/library/bb386921.aspx

“创建自定义 CopyToDataTable 方法”段落 > 示例

我试图做类似的事情。这是我的代码:

ObjDA = new OleDbDataAdapter(querySQL, conection);

//Create a DataSet object:
ObjDS = new DataSet();

ObjDA.Fill(ObjDS, "Table1");

DataTable MyTable = ObjDS.Tables["Table1"];

//IEnumerable<DataRow> query =
var query =
    from user in MyTable.AsEnumerable()
    where user.Field<string>("Name").StartsWith("c", true, null)
    select new
    {
        Name = user.Field<string>("Name")
    };

DataTable orderTable = query.CopyToDataTable();

问题出在“query.CopyToDataTable”中:没有隐式引用转换“AnonymoustType#1”到“System.Data.DataRow”。如果我写“选择用户”,它可以正常工作,但问题是:选择新的。

如果我写:

query = (...) as IEnumerable<DataRow>

查询总是返回 null。

我不知道该怎么办。

4

2 回答 2

0

您是否真的按照文章中描述的程序进行操作?正如文章所解释的,CopyToDataTable默认情况下仅适用于IEnumerable<DataRow>. 如果要在自定义类型上使用该方法,则需要实现通用类型 T 不是 DataRow 的 CopyToDataTable

该部分中的所有示例都假定您已遵循该过程并CopyToDataTable<T>首先创建了自定义方法。

于 2013-06-23T21:24:22.507 回答
0

为什么query您的代码示例中应该具有CopyToDataTable功能?query是一个 IEnumerable,其中 T 恰好是具有一个属性 ( Name) 的匿名类型:

select new
                {
                    Name = user.Field<string>("Name")
                };

如果你真的想享受 CopyToDataTable 方法,你应该坚持原来的代码示例:

DataTable orders = ds.Tables["SalesOrderHeader"];

IEnumerable<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
    select order;

DataTable boundTable = query.CopyToDataTable<DataRow>();

您应该创建一个自定义 CopyToDataTable 方法以支持您想要的:http: //msdn.microsoft.com/en-us/library/bb669096.aspx

于 2013-06-23T21:14:18.763 回答