C# c-使用linq仅将选定数据复制到新数据表
我已经在网上搜索了很长一段时间,似乎找不到一种优雅的方式 从一个数据表中读取数据, 使用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
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);