1

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

反復回数が非常に少なくなることを確認してください。

方法はありますか?手伝って頂けますか ??

4

2 に答える 2

3

残念ながら IEnumerable Data Row オブジェクトにある CopyToDataTable という拡張メソッドがあります。ただし、次のリンクを使用すると、任意の IEnumerable オブジェクトで呼び出される同じ拡張メソッドを作成/コピーできます。これは要件に一致します。

ここにリンクがあります

これにより、コードにこのようなものを直接書くことができます

drdatedisp.CopyToDataTable();

于 2012-08-06T09:21:00.313 に答える
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;
于 2016-07-18T03:57:12.063 に答える