C# CopyToDataTable方法

C# CopyToDataTable方法,c#,linq,C#,Linq,我一直在看下面的MSDN教程,但似乎无法将该方法应用到我的代码中-无法找出区别所在 这篇文章,在,特别是代码- // 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 = "J

我一直在看下面的MSDN教程,但似乎无法将该方法应用到我的代码中-无法找出区别所在

这篇文章,在,特别是代码-

// 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();
看起来很简单。带有book和movie子类的对象数组似乎可以转换为DataRow,这就是CopyToDataTable运行的对象

但是我存储在变量中的对象数组不允许我使用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
                                 })
             );
var qryData=
sdTable.AsEnumerable().Cast()
.OrderByDescending(t=>t[c.ColumnName]==DBNull.Value
?0:转换为单个(t[c.ColumnName]))
.GroupBy(t=>t[“DAT_ID”])
.Select(g=>new{g,count=g.count()})
.SelectMany(x=>x.g.Select(b=>b)
.Zip(可枚举范围(1,x.count),(j,i)=>新{
inst=j[“数据ID”],
idn=j[“ID_NUM”],
val=j[c.ColumnName],
tdt=每日计数[转换为32(j[“数据ID”)],
rn=i
})
);
查询工作正常,返回大量的“(inst、idn、val、tdt、rn)”,但不能在其上使用copytodatable。{方法不可用}添加.ToArray()或.AsEnumerable()也没有帮助

谢谢你的帮助

编辑:

速记,
我已经包含了System.Data,认为.CopyToDataTable()方法在其中是可用的。我试图包括System.Data.DataTableExtensions,但没有。然后,我尝试将System.Data.DataSetExtensions作为(.NET)引用包含在我的项目中,但没有起到任何作用。

基于以下陈述:

但不能在其上使用CopyToDataTable。添加.ToArray()或.AsEnumerable()也没有帮助


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

您是否有System.Data.DataTableExtensions的
using
语句?那么当您尝试使用它时会发生什么?您是否在运行时收到错误或异常?如果是,那是什么?谢谢你的提示!我尝试执行include System.Data.DataTableExtensions,但名称空间没有被激活found@willy_pond,所以您构建了扩展方法,并将其放在
名称空间System.Data
声明中?您好,我相信它位于“System.Data”名称空间中,我将其包括在内。为了确保我尝试了include System.Data.DataTableExtensions,但没有找到名称空间我还没有构建任何扩展方法-我认为.CopyToDataTable()扩展方法在System.Data中可用-MSDN上肯定提到过它-