';选择new';不会';无法在LINQ to DataSet.CopyToDataTable()中工
本文关键字:DataSet CopyToDataTable 中工 to new 选择 不会 LINQ | 更新日期: 2023-09-27 18:19:31
在以下链接中: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。
我不知道该怎么办。
您真的遵循了文章中描述的过程吗?正如本文所解释的,默认情况下,CopyToDataTable
仅适用于IEnumerable<DataRow>
。如果要在自定义类型上使用该方法,则需要实现CopyToDataTable Where the Generic type T Is Not a DataRow
该部分中的所有示例都假设您已经遵循了流程并首先创建了自定义CopyToDataTable<T>
方法。
为什么代码示例中的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