我一直在MSDN上查看以下教程,但似乎无法将该方法应用于我的代码 - 无法弄清楚它们之间的区别是什么!
这篇文章位于Creating a DataTable From a Query (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。 {方法不可用}添加.ToArray()或.AsEnumerable()也无济于事。
感谢您的帮助!
编辑:
快速记录, 我已经包含System.Data,认为.CopyToDataTable()方法可用。我试图包含System.Data.DataTableExtensions - 但不是。然后我尝试在我的项目中包含System.Data.DataSetExtensions作为(.NET)引用 - 但没有帮助。
答案 0 :(得分:0)
基于此声明:
但不能使用CopyToDataTable。添加.ToArray()或.AsEnumerable()也无济于事。
您只需在代码文件的顶部添加相应的using
语句即可使用namespace
中定义的扩展方法。因此,请查看您定义的namespace
该类,并将using
添加到您要在其中使用的代码文件的顶部。