无法将数据从查询复制到数据表

Posted

技术标签:

【中文标题】无法将数据从查询复制到数据表【英文标题】:Cannot copy data from query to datatable 【发布时间】:2016-03-06 21:43:39 【问题描述】:

我有一个小问题,我只是找不到解决方法。

对于我的数据表 Dictionar.DtDomenii,我需要从我的另一个数据表 Dictionar.Dt 复制唯一数据。

我写了一个查询,但是当使用query.CopyToDataTable() 将数据复制到我的DtDomenii 表中时,“CopyToDataTable”函数没有显示...

我做错了吗?有没有更简单的方法可以将不同的数据(我的示例中的类别)从一个数据表复制到另一个数据表?

PS:我已经阅读了来自MSDN https://msdn.microsoft.com/en-us/library/bb386921%28v=vs.110%29.aspx的信息

void LoadCategories()

    var query = (from cat in Dictionar.dt.AsEnumerable()
                 select new 
                        
                            categorie = categorii.Field<string>("Categoria")
                        ).Distinct();

    // This statement does not work: 
    Dictionar.dtDomenii = query.CopyToDataTable();

【问题讨论】:

尝试使用 DataRow,如下所述:***.com/questions/16/… 接受答案的评论员声称.NET 3.5 之后不支持这种方式。 【参考方案1】:

只有 DataRow 的集合可以使用CopyToDataTable 方法。例如:

DataTable table = new DataTable();
table.AsEnumerable().CopyToDataTable(); // this works

List<DataRow> dataRows = new List<DataRow>();
dataRows.CopyToDataTable(); // this also works

List<string> strings = new List<string>();
strings.CopyToDataTable(); // this does not work

您查询的select new... 部分正在将DataRow 转换为object。您需要先将对象转换回 DataRows,然后才能使用 CopyToDataTable 方法。

可能做这样的事情会更好:

DataTable copy = Dictionar.dt
   .AsEnumerable()       // now an enumerable of DataRow
   .Distinct()           // remove duplicates, still an enumerable of DataRow
   .CopyToDataTable();   // done!

您也可以使用Dictionar.dt.Copy() 制作表格的完整副本,然后手动删除重复的行。

【讨论】:

以上是关于无法将数据从查询复制到数据表的主要内容,如果未能解决你的问题,请参考以下文章

将连接查询从数据库复制到另一个数据表

将查询从 linq 复制到数据表时出错

无法将 SQLite 数据库从资产文件夹复制到设备内存

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

我无法将数据从主表复制到临时表

Oracle 将执行计划从一个数据库复制到另一个