Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c-使用linq仅将选定数据复制到新数据表_C#_Linq_Select_Datatable_Group By - Fatal编程技术网

C# c-使用linq仅将选定数据复制到新数据表

C# c-使用linq仅将选定数据复制到新数据表,c#,linq,select,datatable,group-by,C#,Linq,Select,Datatable,Group By,我已经在网上搜索了很长一段时间,似乎找不到一种优雅的方式 从一个数据表中读取数据, 使用linq将其分组为两个变量 仅选择这两个变量,忽略源数据表中的其他变量,然后 将这些项复制到新的数据表。 我没有选择特定的变量就可以工作,但是对于程序稍后要处理的数据量,我宁愿只复制真正需要的数据 var temp123 = from row in oldDataTable.AsEnumerable() orderby row["Column1"] ascending

我已经在网上搜索了很长一段时间,似乎找不到一种优雅的方式

从一个数据表中读取数据, 使用linq将其分组为两个变量 仅选择这两个变量,忽略源数据表中的其他变量,然后 将这些项复制到新的数据表。 我没有选择特定的变量就可以工作,但是对于程序稍后要处理的数据量,我宁愿只复制真正需要的数据

var temp123 = from row in oldDataTable.AsEnumerable()
              orderby row["Column1"] ascending
              group row by new { Column1 = row["Column1"], Column2 = row["Column2"] } into grp
              select grp.First();

newDataTable = temp123.CopyToDataTable();

有谁能帮我一下吗?谢谢

您可以使用本文中CopyToDataTable方法的自定义实现

另一个选项,正如Tim所建议的那样——手动创建DataTable

var newDataTable = new DataTable();
newDataTable.Columns.Add("Column1");
newDataTable.Columns.Add("Column2");

foreach(var item in temp123)
    newDataTable.Rows.Add(item.Column1, item.Column2);

最后一个选项(如果可能的话)——不要使用DataTable——只需使用强类型对象的集合。

您不能在IEnumerable上使用CopyToDataTable,只能在IEnumerable上使用。您需要手动创建一个新的DataTable,并使用循环将此查询结果填入其中。感谢您的快速回复!我选择了第二种解决方案,因为我想定制的CopyToDataTable对于我的需求来说似乎有点不成比例;
var newDataTable = new DataTable();
newDataTable.Columns.Add("Column1");
newDataTable.Columns.Add("Column2");

foreach(var item in temp123)
    newDataTable.Rows.Add(item.Column1, item.Column2);