2012-08-03 67 views
1

我正在使用LINQ查询来过滤来自数据表的数据并将数据放入另一个数据表中。为此,我使用foreach语句将值从var复制到数据表。数据表将包含一个非常巨大的数字。所以你可以向我建议一种方法,我可以一次性复制文件吗?在LINQ查询后将数据从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); 
      } 
     } 

请参阅会有非常少无迭代....

有什么办法?你可以帮我吗 ??

回答

3

存在一个称为CopyToDataTable的扩展方法,它不幸在IEnumerable Data Row对象上。但通过使用以下链接,可以创建/复制将在任何IEnumerable对象上调用的相同扩展方法。这将符合您的要求。

Here is the link

有了这个,你可以直接写这样的事情在你的代码

drdatedisp.CopyToDataTable();

+0

扩展方法是要走的路! – Marty 2012-08-08 11:28:03

+0

我无法理解,你能解释一下吗? – 2012-08-08 18:02:46

+0

单击链接,添加上述链接中描述的类和扩展方法,并在您的drdatedisp变量上调用扩展方法 – 2012-08-09 05:44:24

1

use CopyToDataTable();验证结果:

var results = (from myRow in myData.AsEnumerable() 
          where myRow.Field<double>("Num1") == 1 
          select myRow).CopyToDataTable(); 

      DataTable dtTemp = (DataTable)results; 
      gvMain.DataSource = dtTemp;