';选择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。

我不知道该怎么办。

';选择new';不会';无法在LINQ to DataSet.CopyToDataTable()中工

您真的遵循了文章中描述的过程吗?正如本文所解释的,默认情况下,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