我一直在看 MSDN 上的以下教程,但似乎无法将该方法应用于我的代码 - 无法弄清楚有什么区别!
这篇文章是在从查询创建数据表 (LINQ to DataSet),特别是代码 -
// Create a sequence.
Item[] items = new Item[] {
new Book{Id = 1, Price = 13.50, Genre = "Comedy", Author = "Gustavo Achong"},
new Book{Id = 2, Price = 8.50, Genre = "Drama", Author = "Jessie Zeng"},
new Movie{Id = 1, Price = 22.99, Genre = "Comedy", Director = "Mary Barnes"},
new Movie{Id = 1, Price = 13.40, Genre = "Action", Director = "Emmanuel Black"}
};
// Query for items with price greater than 9.99.
var query = from i in items
where i.Price > 9.99
orderby i.Price
select i;
// Load the query results into new DataTable.
DataTable table = query.CopyToDataTable();
看起来很简单。具有书籍和电影子类的对象数组似乎可以转换为 DataRow,这是 CopyToDataTable 运行的。
但是我存储在 var 中的对象数组不允许我使用 CopyToDataTable 方法。我会认为我的对象'qryData'与上面的'items'非常相似......
var qryData =
sdTable.AsEnumerable().Cast<DataRow>()
.OrderByDescending(t => t[c.ColumnName] == DBNull.Value
? 0 : Convert.ToSingle(t[c.ColumnName]))
.GroupBy(t => t["DAT_ID"])
.Select(g => new {g, count = g.Count()})
.SelectMany(x => x.g.Select(b => b)
.Zip(Enumerable.Range(1, x.count), (j, i) => new {
inst = j["DAT_ID"],
idn = j["ID_NUM"],
val = j[c.ColumnName],
tdt = dailyCount[Convert.ToInt32(j["DAT_ID"])],
rn = i
})
);
查询工作正常,返回“(inst,idn,val,tdt,rn)”的大集合,但不能在其上使用CopyToDataTable。{method is not available} 添加 .ToArray() 或 .AsEnumerable() 也无济于事。
谢谢你的帮助!
编辑:
快速说明,我已经包含 System.Data,认为 .CopyToDataTable() 方法在其中可用。我试图包括 System.Data.DataTableExtensions - 但不在那里。然后我尝试将 System.Data.DataSetExtensions 作为(.NET)引用包含在我的项目中——但没有帮助。