トップページに戻る    次のC#のサンプルへ    前のC#のサンプルへ

6-5 CopyToDataTable拡張メソッド

C#のサンプル

CopyToDataTable拡張メソッドの使用例です。


ソース

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;

class Program
{
    static void Main()
    {
        var BaseDt = new System.Data.DataTable();
        BaseDt.Columns.Add("ID", typeof(int));
        BaseDt.Columns.Add("Val", typeof(int));

        BaseDt.Rows.Add(1, 11);
        BaseDt.Rows.Add(2, 22);
        BaseDt.Rows.Add(3, 33);
        BaseDt.Rows.Add(4, 44);

        IEnumerable<DataRow> query1 = BaseDt.Select();
        IEnumerable<DataRow> query2 = BaseDt.Select().Where(X => (int)X["Val"] == 11);
        DataTable dt1 = query1.CopyToDataTable();
        DataTable dt2 = query2.CopyToDataTable();

        //CopyToDataTable後は、DataRowを書き換えても影響を受けない
        foreach (DataRow AnyRow in query1) {
            AnyRow["Val"] = 999;
        }
        foreach (DataRow AnyRow in query1) {
            Console.WriteLine("ID={0},Val={1}", AnyRow["ID"], AnyRow["Val"]);
        }
        foreach (DataRow AnyRow in dt1.Rows) {
            Console.WriteLine("ID={0},Val={1}", AnyRow["ID"], AnyRow["Val"]);
        }
    }
}


実行結果

ID=1,Val=999
ID=2,Val=999
ID=3,Val=999
ID=4,Val=999
ID=1,Val=11
ID=2,Val=22
ID=3,Val=33
ID=4,Val=44


解説

System.Data.DataTableクラスの拡張メソッドのCopyToDataTableメソッドを使えば、
IEnumerable<DataRow>からDataTableを作成できます。

MSDN --- DataTableExtensions.CopyToDataTable<T> メソッド (IEnumerable<T>)