我正在使用LINQ查询来过滤数据表中的数据并将数据放入另一个数据表中。为此,我使用foreach语句将值从var复制到datatable。数据表将包含一个非常大的数字。你可以建议我一种方法,我可以一次性复制吗?
var drdatedisp = from row in dtfullreport.AsEnumerable()
group row by row.Field<string>("Order_Date") into g
select new
{
Order_Date = g.Key,
totalQnty = g.Sum(a => a.Field<int>("Item_Quantity")),
totalTax = g.Sum(a => float.Parse(a.Field<decimal>("TAXAMT").ToString())),
totalAmt = g.Sum(a => float.Parse(a.Field<decimal>("VALAMT").ToString()))
};
DataTable dtdatedisp = new DataTable();
dtdatedisp.Columns.Add("Order_Date");
dtdatedisp.Columns.Add("Item_Quantity");
dtdatedisp.Columns.Add("TAXAMT");
dtdatedisp.Columns.Add("VALAMT");
dtdatedisp.Rows.Clear();
foreach (var g in drdatedisp)
{
DataRow newRow1 = dtdatedisp.NewRow();
newRow1[0] = g.Order_Date;
newRow1[1] = g.totalQnty;
newRow1[2] = String.Format("{0:0.00}", g.totalTax);
newRow1[3] = String.Format("{0:0.00}", g.totalAmt);
dtdatedisp.Rows.Add(newRow1);
}
}
请注意,迭代次数会少得多....
有什么办法吗?你能救我吗?
答案 0 :(得分:3)
有一个名为CopyToDataTable的扩展方法,遗憾的是在IEnumerable Data Row对象上。但是通过使用以下链接,您可以创建/复制将在任何IEnumerable对象上调用的相同扩展方法。这将符合您的要求。
有了这个,你可以在你的代码中直接写这样的东西
drdatedisp.CopyToDataTable();
答案 1 :(得分:1)
使用CopyToDataTable();验证结果:
var results = (from myRow in myData.AsEnumerable()
where myRow.Field<double>("Num1") == 1
select myRow).CopyToDataTable();
DataTable dtTemp = (DataTable)results;
gvMain.DataSource = dtTemp;