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

时间:2015-12-02 15:18:07

标签: c# linq

我有一个小问题,我找不到如何修复它。

对于我的数据表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();
}

1 个答案:

答案 0 :(得分:0)

只有 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 转换为对象。您需要先将对象转换回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()制作表格的完整副本,然后手动删除重复的行。