【问题标题】:Copying data from var to DataTable after LINQ queryLINQ查询后将数据从var复制到DataTable
【发布时间】:2012-08-03 08:00:28
【问题描述】:

我正在使用 LINQ 查询过滤数据表中的数据并将数据放入另一个数据表中。为此,我使用 foreach 语句将值从 var 复制到数据表。数据表将包含一个非常大的编号。行,所以你能建议我一种可以一次性完成复制的方法吗?

            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);
            }
        }

请注意,迭代次数将非常少......

有什么办法吗??你能帮帮我吗?

【问题讨论】:

    标签: c# .net linq datatable


    【解决方案1】:

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

    Here is the link

    有了这个,你可以直接在你的代码中写这样的东西

    drdatedisp.CopyToDataTable();

    【讨论】:

    • 扩展方法是要走的路!
    • 我看不懂,你能解释一下吗??
    • 点击链接,添加上面链接中描述的类和扩展方法,并在你的 drdatedisp 变量上调用扩展方法
    【解决方案2】:

    使用 CopyToDataTable();验证结果:

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

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多