푸터 콘텐츠로 바로가기
.NET 도움말

C# Datatable to List (개발자용 작동 방식)

Converting DataTable to List in C

C# 프로그래밍 영역에서, DataTable를 목록으로 변환해야 할 필요가 종종 발생합니다. 많은 초보자가 이 작업에 걸려 넘어지지만, 그들이 가지고 있는 답은 종종 충분히 포괄적이지 않습니다. 본 튜토리얼은 그러한 틈을 메우고 C#에서 DataTable를 목록으로 변환하는 방법에 대한 명확한 가이드를 제공하고자 합니다.

DataTable란 무엇인가요?

변환 과정에 들어가기 전에, DataTable가 무엇인지 이해하는 것이 중요합니다. C#에서, DataTable 객체는 행과 열이 있는 메모리내 데이터베이스 테이블의 표현입니다. 이는 System.Data 네임스페이스의 일부입니다.

이 튜토리얼을 위해, dt라는 샘플 DataTable를 사용해 보겠습니다. 이는 아래와 같이 시각화할 수 있습니다:

using System.Data;

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");
using System.Data;

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");
Imports System.Data

Private 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를 목록으로 변환하는 주요 방법은 두 가지가 있습니다:

  1. LINQ (언어 통합 쿼리) 사용
  2. 고전적인 foreach 루프 사용

LINQ를 사용한 변환

LINQ 방법은 C#에서 컬렉션을 선언적으로 쿼리하는 방법을 제공하는 강력한 도구입니다. 이것을 할 수 있는 방법을 살펴보겠습니다.

다음과 같이 메서드를 정의하십시오:

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

private static List<dynamic> LinqMethod(DataTable dt)
{
    return dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
using System.Linq;
using System.Collections.Generic;

private static List<dynamic> LinqMethod(DataTable dt)
{
    return dt.AsEnumerable().Select(row =>
        new 
        {
            ID = row.Field<int>("ID"),
            Category = row.Field<string>("Category")
        }).ToList();
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports System.Linq
Imports System.Collections.Generic

'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Private Shared Function LinqMethod(ByVal dt As DataTable) As List(Of Object)
	Return dt.AsEnumerable().Select(Function(row) New With {
		Key .ID = row.Field(Of Integer)("ID"),
		Key .Category = row.Field(Of String)("Category")
	}).ToList()
End Function
$vbLabelText   $csharpLabel

위의 코드에서, DataTable dt에서 확장 메서드 AsEnumerable()가 호출됩니다. 이를 통해 DataTable의 각 DataRow에 대해 LINQ를 사용할 수 있습니다. 이 메서드는 동적 객체의 목록을 생성하며, 각각은 DataTable의 행을 나타냅니다.

foreach 루프를 사용한 변환

foreach 루프는 C#에서 컬렉션을 순회하는 검증된 방법입니다. 이 방법은 약간 길어 보일 수 있지만 이해하고 구현하기 쉽습니다.

다음은 작동 방법입니다:

private static List<Category> 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
        {
            ID = Convert.ToInt32(row["ID"]),
            Name = row["Category"].ToString()
        };
        list.Add(category);
    }
    return list;
}

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
private static List<Category> 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
        {
            ID = Convert.ToInt32(row["ID"]),
            Name = row["Category"].ToString()
        };
        list.Add(category);
    }
    return list;
}

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
Private Shared Function ForeachMethod(ByVal dt As DataTable) As List(Of Category)
	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 With {
			.ID = Convert.ToInt32(row("ID")),
			.Name = row("Category").ToString()
		}
		list.Add(category)
	Next row
	Return list
End Function

Public Class Category
	Public Property ID() As Integer
	Public Property Name() As String
End Class
$vbLabelText   $csharpLabel

ForeachMethod 메서드에서, DataTableforeach 루프를 사용하여 반복됩니다. 각 DataRow에 대해 새 Category 객체가 인스턴스화되어 list에 추가됩니다.

고급 변환 기술 확장

C#에서 DataTable를 목록으로 변환하는 기본을 마스터한 후, 이 프로세스를 최적화하고 더 복잡한 시나리오에 맞추기 위한 여러 고급 기법과 고려사항이 있습니다. 이 기술들 중 일부를 더 깊이 탐구해 봅시다.

DataTable를 목록으로 변환하기 위한 리플렉션 사용

반사는 런타임 시 타입의 메타데이터를 검사할 수 있게 하는 C#의 강력한 도구로, 그 힘을 활용해 봅시다:

using System.Reflection;

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;
}
using System.Reflection;

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;
}
Imports System.Reflection

Private Shared Function ConvertDataTableToList(Of T As New)(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
        list.Add(obj)
    Next
    Return list
End Function
$vbLabelText   $csharpLabel

ConvertDataTableToList 메서드는 리플렉션을 사용하여, DataTable의 각 DataRow와 열을 반복합니다. 각 열에 대해 일반 객체에서 일치하는 속성을 찾아 값을 설정합니다. 이 접근 방식은 어떤 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 도구 키트

우리가 C#에서 DataTable를 목록으로 변환하는 복잡한 사항들을 깊이 있게 살펴보았지만, 때로는 외부 도구에 의존하는 것이 더 복잡한 작업을 수행할 때 개발 프로세스를 단순화할 수 있습니다. 여기서 Iron Suite가 등장합니다.

IronPDF: PDF 강자

C# DataTable to List (How It Works For Developers) Figure 1 - IronPDF for .NET: The C# PDF Library

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: 엑셀 작업의 탁월함

C# DataTable to List (How It Works For Developers) Figure 2 - IronXL for .NET: The C# Excel Library

만약 당신의 DataTable 변환이 Excel 관련 작업을 필요로 한다면, IronXL이 필요한 도구입니다. 이 제품은 엑셀 스프레드시트를 읽고, 편집하고, 생성하는 원활한 작업을 제공합니다. 데이터 테이블을 목록으로 변환한 상태에서 데이터를 엑셀 형식으로 내보내는 작업은 IronXL로 매우 간단해집니다.

IronOCR: 텍스트 인식 가능하게 하기

C# DataTable to List (How It Works For Developers) Figure 3 - IronOCR for .NET: The C# OCR Library

당신의 DataTable가 이미지 기반 데이터로 구성되어 있거나 이미지에서 텍스트를 추출해야 할 때가 있을 수 있습니다. 이럴 때 IronOCR가 빛을 발합니다. .NET 개발자가 이미지에서 텍스트를 읽을 수 있게 하여, 당신의 DataTable 변환 작업이 텍스트 정보를 포함한 이미지를 포함할 경우 보완적인 도구가 됩니다.

IronBarcode: 선간의 읽기

C# DataTable to List (How It Works For Developers) Figure 4 - IronBarcode for .NET: The C# Barcode Library

결론적으로, IronBarcode는 애플리케이션에서 바코드 작업을 수행하기 위한 도구입니다. 당신의 DataTable 또는 목록으로 변환한 그것이 바코드를 포함한 제품 정보를 포함한다고 가정해 보십시오. 그럴 경우, IronBarcode는 원시 제품 데이터와 스캔 가능한 바코드 정보 간의 차이를 연결하는 효율적인 메커니즘을 제공합니다.

결론

C# DataTable to List (How It Works For Developers) Figure 5 - Iron Suite: License information

모든 C# 개발자에게 중요한 DataTable를 조작하고 변환하는 수작업 방법은 Iron Suite가 제공하는 강력한 도구들을 통합하면 당신의 생산성과 능력을 기하급수적으로 향상시킬 수 있습니다. 각 제품 라이선스는 $999에서 시작되며, 더욱 매력적인 것은 모든 제품이 무료 체험을 제공한다는 점입니다. 이 도구에 투자하는 것을 고려하고 계신다면, 매력적인 제안이 있습니다: 단 두 개의 제품 가격으로 전체 Iron Suite를 획득할 수 있습니다. .NET 개발 작업의 질과 효율성을 확고히 향상시킬 수 있는 포괄적인 솔루션을 받아들여 보세요.

자주 묻는 질문

C#에서 DataTable이란?

C#의 DataTable은 행과 열로 구성된 데이터베이스 표의 메모리 내 표현입니다. 이는 System.Data 네임스페이스의 일부입니다.

C#에서 LINQ를 사용하여 DataTable을 리스트로 어떻게 변환할 수 있나요?

LINQ를 사용하여 DataTable을 리스트로 변환할 때는 AsEnumerable() 메서드를 사용하여 각 DataRow를 반복하고 Select를 사용하여 각 행을 나타내는 동적 객체 목록을 생성합니다.

C#에서 foreach 루프를 사용하여 DataTable을 리스트로 변환하는 과정은 무엇인가요?

foreach 루프를 사용하여 DataTable을 리스트로 변환하려면 각 DataRow를 반복하고 각 행에 대해 새 객체를 인스턴스화하여 DataRow에서 속성을 채우고 이를 리스트에 추가합니다.

리플렉션은 C#에서 DataTable 변환을 어떻게 향상시키나요?

리플렉션을 사용하면 DataTable 열을 객체 속성에 동적으로 매핑하여 모든 DataTable을 일반 객체 리스트로 변환할 수 있는 재사용 가능한 메서드를 제공합니다.

IronPDF는 DataTable에서 파생된 PDF를 처리하는 데 어떻게 도움이 되나요?

IronPDF는 개발자가 PDF 문서를 생성, 편집, 데이터 추출을 가능하게 하여 DataTable에서 파생된 데이터로 보고서를 생성하는 데 유용합니다.

C#의 Excel 작업에 있어 IronXL는 어떤 장점을 제공하나요?

IronXL는 데이터를 DataTable에서 Excel 형식으로 내보내도록 하여 개발자가 Excel 스프레드시트를 쉽게 읽고, 편집하고, 생성할 수 있게 합니다.

IronOCR는 DataTable에 어떻게 적용될 수 있나요?

IronOCR는 DataTable 내 이미지에서 텍스트를 읽을 수 있어, 텍스트 정보를 포함한 이미지 기반 데이터를 처리할 수 있게 합니다.

IronBarcode는 바코드로 DataTable 작업을 어떻게 향상시키나요?

IronBarcode는 바코드를 읽고 생성할 수 있는 기능을 제공하여, 바코드가 있는 제품 정보를 포함하는 DataTable 또는 리스트에 유익합니다.

DataTable 변환을 위한 리플렉션 사용 시 성능 고려사항은 무엇인가요?

리플렉션은 유연성을 제공하지만 특히 큰 데이터 테이블에서 다른 메서드보다 속도가 느릴 수 있으므로 성능과 재사용성 및 유지보수성 간 균형을 맞추는 것이 중요합니다.

Iron Software 제품에 대한 라이선스 및 체험판 기회는 있나요?

네, 이 기사에서는 Iron Suite 제품에 대한 라이선스 및 체험판 기회가 제공되어 개발자가 구매 전 도구를 평가할 수 있다고 언급합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해