.NET ヘルプ

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

多くの場合、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")
$vbLabelText   $csharpLabel

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

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

  1. LINQ(言語統合クエリ)を使用して

  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
$vbLabelText   $csharpLabel

var listvar row、およびlinqmethodの使用に注意してください。 上記のコードでは、DataTable dtに対して拡張メソッドAsEnumerable()が呼び出されています。 これにより、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
$vbLabelText   $csharpLabel

private static void ForeachMethod() メソッドでは、foreach ループを使用してDataTableを反復処理します。 各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
$vbLabelText   $csharpLabel

高度な変換技術の拡張

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

以前に議論した方法の制限の1つは、それらが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
$vbLabelText   $csharpLabel

この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)
$vbLabelText   $csharpLabel

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

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

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

.NET開発者向けIron Suite Toolkit

私たちはC#でのDataTableをリストに変換する複雑さを掘り下げましたが、より複雑な操作に関しては、外部ツールに頼ることで開発プロセスを簡素化できることがあります。 そこでIron Suiteが登場します。

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

IronPDF: PDFのパワーハウス

C# DataTableをリストに変換(開発者向けの仕組み)図1 - IronPDF for .NET: C# PDFライブラリ

C#でPDFを扱う際、IronPDFは画期的な存在です。 あなたのDataTableをリストに変換し、それからPDFレポートを生成する必要があると想像してください。 IronPDFは、PDFドキュメントを簡単に作成、編集、データ抽出でき、データテーブルから得られた情報をプロフェッショナルなレポートに変換するプロセスを効率化します。

IronPDFの主な機能は、レイアウトとスタイルが保持されるHTML to 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
$vbLabelText   $csharpLabel

IronXL: Excel 操作の卓越性

C# DataTable to List(開発者向けの動作方法)図2 - IronXL for .NET: C# Excelライブラリ

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

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

C# DataTableからListへの変換(開発者向けの作業方法)図3 - IronOCR for .NET: C# OCRライブラリ

場合によっては、DataTable が画像ベースのデータで構成されているか、画像からテキストを抽出する必要があることがあります。 これはIronOCRの本領が発揮される場所です。 .NET開発者が画像からテキストを読み取ることを可能にするため、DataTable変換操作がテキスト情報を含む画像を伴う場合には補完的なツールとなります。

IronBarcode: ライン間を読み取る

C# データテーブルをリストに変換する方法(開発者向け)図 4 - IronBarcode for .NET: C# バーコード ライブラリ

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

結論

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

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

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
C# Webアプリ(開発者向けの動作方法)
次へ >
C# 参照キーワード (開発者向けの動作方法)