0

我一直在看 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)引用包含在我的项目中——但没有帮助。

4

1 回答 1

0

基于此声明:

但不能在其上使用 CopyToDataTable。添加 .ToArray() 或 .AsEnumerable() 也无济于事。

您只需将适当的using语句添加到代码文件的顶部即可使用namespace定义的扩展方法。因此,请检查namespace您在其中定义的类并将其添加using到您要使用的代码文件的顶部在。

于 2013-06-05T19:58:57.970 回答