.NET ヘルプ

C# データテーブルからリストへ (開発者向けの動作方法)

更新済み 11月 14, 2023
共有:

プログラミングでC#を使用する際、DataTable をリストに変換する必要がしばしば生じます。多くの初心者はこのタスクに苦労しますが、得られる回答はしばしば包括的ではありません。 このチュートリアルは、そのギャップを埋め、C#で DataTable をリストに変換する方法に関する明確なガイドを提供することを目的としています。

DataTableとは何ですか?

変換プロセスに入る前に、理解することが重要です、何が DataTable(データテーブル) です。 C#では、DataTableオブジェクトは行と列からなるメモリ内データベーステーブルの表現です。 それは System.Data 名前空間の一部です。

このチュートリアルのために、サンプルの DataTable である DataTable dt を使用しましょう。 DataTable dt は次のコード例のように視覚化できます:

DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Category", typeof(string));
dt.Rows.Add(1, "Electronics");
dt.Rows.Add(2, "Books");
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Category", typeof(string));
dt.Rows.Add(1, "Electronics");
dt.Rows.Add(2, "Books");
Dim dt As New DataTable()
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("Category", GetType(String))
dt.Rows.Add(1, "Electronics")
dt.Rows.Add(2, "Books")
VB   C#

コンバージョンの開始方法

では、あなたの DataTable dt が手元にあります。そして今、それを見つめながら「これをどうやって変換するんだ?」と考えています。 ご安心ください。 それは調査努力を示す質問です。 DataTableをリストに変換する主な方法は2つあります:

  1. 使用 LINQ (言語統合クエリ (言語統合クエリ (Language Integrated Query)))

  2. クラシックな foreach ループ を使用する

LINQを使用した変換

LINQメソッドは、C#における強力なツールであり、宣言型の方法でコレクションをクエリする手段を提供します。 どのようにこれが達成できるかを見てみましょう。

以下のコード例のようにメソッドを定義します:

private static void LinqMethod(DataTable dt)
{
    var list = dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
private static void LinqMethod(DataTable dt)
{
    var list = dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
Private Shared Sub LinqMethod(ByVal dt As DataTable)
	Dim list = dt.AsEnumerable().Select(Function(row) New With {
		Key .ID = row.Field(Of Integer)("ID"),
		Key .Category = row.Field(Of String)("Category")
	}).ToList()
End Sub
VB   C#

以下の内容を日本語に翻訳してください:

var listvar row、およびlinqmethodの使用に注目してください。 上記のコードでは、拡張メソッド AsEnumerable()「DataTable dt」に対して が呼び出されます。 これにより、DataTable内の各DataRow rowに対してLINQを使用することができます。

Foreachループを使用した変換

foreachループは、C#でコレクションを反復処理するための、実績のある方法です。 この方法は少し長く感じるかもしれませんが、理解しやすく実装するのが簡単です。

始めましょう:

private static void ForeachMethod(DataTable dt)
{
    List<Category> list = new List<Category>();

    // Iterates through each row within the data table
    foreach (DataRow row in dt.Rows)
    {
        var category = new Category();
        category.ID = Convert.ToInt32(row ["ID"]);
        category.Name = row ["Category"].ToString();
        list.Add(category);
    }
}
private static void ForeachMethod(DataTable dt)
{
    List<Category> list = new List<Category>();

    // Iterates through each row within the data table
    foreach (DataRow row in dt.Rows)
    {
        var category = new Category();
        category.ID = Convert.ToInt32(row ["ID"]);
        category.Name = row ["Category"].ToString();
        list.Add(category);
    }
}
Private Shared Sub ForeachMethod(ByVal dt As DataTable)
	Dim list As New List(Of Category)()

	' Iterates through each row within the data table
	For Each row As DataRow In dt.Rows
		Dim category As New Category()
		category.ID = Convert.ToInt32(row ("ID"))
		category.Name = row ("Category").ToString()
		list.Add(category)
	Next row
End Sub
VB   C#

以下のコンテンツを日本語に翻訳します:

private static void ForeachMethod()メソッドでは、DataTableforeach ループを使用して反復処理します。 各datarow rowに対して、新しいvar categoryオブジェクトがインスタンス化され、var list`に追加されます。

カテゴリを表すためには、クラスが必要です。

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
Public Class Category
	Public Property ID() As Integer
	Public Property Name() As String
End Class
VB   C#

高度な変換技術の拡張

C#でDataTableをリストに変換する基本をマスターした後は、このプロセスを最適化し、より複雑なシナリオに適応させるための高度な技術と考慮事項がいくつかあります。 これらの技術のいくつかについてさらに掘り下げてみましょう。

前述の方法の制限の一つは、これらが私たちの Category クラスに特化していることです。 任意のDataTableをジェネリックオブジェクトのリストに変換するメソッドを書くことができたらどうしますか?

リフレクションを使用して DataTable をリストに変換

リフレクションは、C#で実行時に型のメタデータを検査するための強力なツールです。その力を活用しましょう。

private static List<T> ConvertDataTableToList<T>(DataTable dt) where T : new()
{
    List<T> list = new List<T>();

    foreach (DataRow row in dt.Rows)
    {
        T obj = new T();
        foreach (DataColumn col in dt.Columns)
        {
            var prop = obj.GetType().GetProperty(col.ColumnName);
            if (prop != null && row [col] != DBNull.Value)
                prop.SetValue(obj, row [col]);
        }
        list.Add(obj);
    }
    return list;
}
private static List<T> ConvertDataTableToList<T>(DataTable dt) where T : new()
{
    List<T> list = new List<T>();

    foreach (DataRow row in dt.Rows)
    {
        T obj = new T();
        foreach (DataColumn col in dt.Columns)
        {
            var prop = obj.GetType().GetProperty(col.ColumnName);
            if (prop != null && row [col] != DBNull.Value)
                prop.SetValue(obj, row [col]);
        }
        list.Add(obj);
    }
    return list;
}
Private Shared Function ConvertDataTableToList(Of T As New)(ByVal dt As DataTable) As List(Of T)
	Dim list As New List(Of T)()

	For Each row As DataRow In dt.Rows
		Dim obj As New T()
		For Each col As DataColumn In dt.Columns
			Dim prop = obj.GetType().GetProperty(col.ColumnName)
			If prop IsNot Nothing AndAlso row (col) IsNot DBNull.Value Then
				prop.SetValue(obj, row (col))
			End If
		Next col
		list.Add(obj)
	Next row
	Return list
End Function
VB   C#

この private static メソッドはリフレクションを使用し、DataTable dt 内の各 DataRow row と列を反復処理します。 各列について、一致するプロパティを検索します (var prop) 汎用オブジェクト内にその値を設定します。 このアプローチでは、任意のDataTableを汎用オブジェクトのリストに変換できる非常に再利用可能な方法が提供されます。

使用方法

上記のコードを使用するには、型を指定してメソッドを呼び出します:

List<Category> categories = ConvertDataTableToList<Category>(dt);
List<Category> categories = ConvertDataTableToList<Category>(dt);
Dim categories As List(Of Category) = ConvertDataTableToList(Of Category)(dt)
VB   C#

このメソッドを使用すると、特定のデータテーブルを特定のオブジェクトタイプに変換することに限定されなくなります。代わりに、さまざまなデータシナリオに対処できる多用途なツールが手元にあることになります。

パフォーマンスに関する考慮事項

リフレクションメソッドは強力ですが、大きなデータテーブルの場合は特に遅くなる可能性があることに注意する価値があります。 パフォーマンスを測定し、コードの再利用性と保守性の利点と比較検討することは常に重要です。

.NET開発者向けIron Suite Toolkit

C#でのDataTableをリストに変換する詳細について掘り下げてきましたが、より複雑な操作に関しては、外部ツールに依存することで開発プロセスを簡素化できる場合があります。 申し訳ありませんが、翻訳するコンテンツが提供されていないようです。以下に続くテキストをご提供いただければ、それを日本語に翻訳いたします。 アイアン スイート 登場します。

アイアン スイート は、.NET開発者の生活をより簡単にするために設計された包括的なツールセットです。 PDF操作やExcel操作から光学文字認識まで (OCR (光学式文字認識)) そしてバーコード読み取り機能において、Iron Suiteは多彩な機能を提供します。 Iron Suiteのコンポーネントを分解し、それらがどのようにDataTable操作を補完できるか見てみましょう。

IronPDF: PDFのパワーハウス

C# DataTable を List に変換(開発者向け説明) 図1 - IronPDF for .NET: C# PDF ライブラリ

C# で PDF を操作する際は、 IronPDF ゲームチェンジャーです。 DataTable をリストに変換してから PDF レポートを生成することを想像してみてください。 IronPDFは、PDFドキュメントを簡単に作成、編集、データ抽出でき、データテーブルから得られた情報をプロフェッショナルなレポートに変換するプロセスを効率化します。

IronPDFの主な機能はその HTMLからPDF 機能を保ち、レイアウトやスタイルが保存されるようにします。 ウェブコンテンツからPDFを生成し、レポート、請求書、およびドキュメントに適しています。 HTMLファイル、URL、およびHTML文字列をPDFファイルに簡単に変換できます。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

IronXL: Excel 操作の卓越性

C# DataTableからリストへ(開発者向けの動作方法)   図2 - IronXL for .NET: C# エクセルライブラリ

DataTableの変換がExcel関連のタスクを必要とする場合、 IronXL は頼るべきツールです。 この製品は、Excelスプレッドシートの読み取り、編集、および作成のシームレスな操作を提供します。 データテーブルをリストに変換した後、IronXLを使用してデータをExcel形式にエクスポートすることは非常に簡単になります。

IronOCR: テキストを認識可能にする

C# DataTableからリストへの変換(開発者向けの仕組み)図3 - IronOCR for .NET: C# OCRライブラリ

DataTableが画像ベースのデータで構成されている場合や、画像からテキストを抽出する必要がある場合があります。 ここは IronOCR shines (シャインズ). これは、.NET開発者が画像からテキストを読み取ることを可能にし、テキスト情報を含む画像を含むDataTable変換操作において補完的なツールとなります。

IronBarcode: ライン間を読み取る

C# DataTable を List に変換 (開発者向けの説明) 図4 - IronBarcode for .NET: C# Barcode ライブラリ

Finally, IronBarcode は、アプリケーション内のバーコード操作に最適なツールです。 あなたの DataTable またはリストに変換したものが、バーコードを含む製品情報で構成されているとします。 その場合、IronBarcodeはバーコードを読み取り、生成するための効率的な仕組みを提供し、生の製品データとスキャン可能なバーコード情報の間のギャップを埋めます。

結論

C# DataTableをリストに変換(開発者向けの動作方法) 図5 - Iron Suite: ライセンス情報

手動で DataTable を操作および変換する方法は、C# 開発者にとって重要ですが、Iron Suite が提供する強力なツールを統合することで、生産性と能力を飛躍的に向上させることができます。 各製品ライセンスは $749 から始まることが注目に値します。また、それぞれの製品において特に魅力的なのは、 無料試用. 以下のツールへの投資を検討している場合、魅力的な提案があります:あなたは Iron Suite全体を取得する わずか2つの製品の価格で。 そのような包括的なソリューションを採用することで、間違いなく.NET開発の品質と効率を向上させることができます。

< 以前
C# Webアプリ(開発者向けの動作方法)
次へ >
C# 参照キーワード (開発者向けの動作方法)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >