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

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

Converting DataTable to List in C

종종 C# 프로그래밍을 할 때, 초보자들이 자주 마주치는 문제는 DataTable를 리스트로 변환해야 한다는 필요성입니다. 이 작업을 수행하려다 실패하는 경우가 많으며, 종종 충분히 포괄적이지 않은 답변을 접하게 됩니다. 이 튜토리얼은 그 간극을 메우고 C#에서 DataTable를 리스트로 변환하는 방법에 대한 명확한 가이드를 제공하려고 합니다.

DataTable란 무엇인가요?

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

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

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

위 코드에서, 확장 메소드 AsEnumerable()DataTable dt에서 호출됩니다. 이것은 각각의 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를 리스트로 변환하기 위해 Reflection을 사용하는 방법

반사는 런타임 시 타입의 메타데이터를 검사할 수 있게 하는 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 메소드는 DataRow과(와) DataTable의 각 열을 반복하는 Reflection을 사용합니다. 각 열에 대해 일반 객체에서 일치하는 속성을 찾아 값을 설정합니다. 이 접근 방식은 어떤 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 (개발자를 위한 작동 방식) 그림 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: 엑셀 작업의 탁월함

C# DataTable to List (개발자를 위한 작동 방식) 그림 2 - IronXL for .NET: C# Excel 라이브러리

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

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

C# DataTable to List (개발자를 위한 작동 방식) 그림 3 - IronOCR for .NET: C# OCR 라이브러리

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

IronBarcode: 선간의 읽기

C# DataTable to List (개발자를 위한 작동 방식) 그림 4 - IronBarcode for .NET: C# 바코드 라이브러리

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

결론

C# DataTable to List (개발자를 위한 작동 방식) 그림 5 - Iron Suite: 라이선스 정보

수동으로 DataTable를 조작하고 변환하는 방법은 모든 C# 개발자에게 중요하지만, Iron Suite이 제공하는 강력한 도구를 통합하면 생산성과 역량이 기하급수적으로 향상될 수 있습니다. 각 제품 라이센스는 $799부터 시작된다는 점이 주목할 만하며, 더욱 매력적인 것은 모든 제품이 무료 체험판을 제공한다는 것입니다. 이 도구에 투자하는 것을 고려하고 계신다면, 매력적인 제안이 있습니다: 단 두 개의 제품 가격으로 전체 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시간 온라인으로 운영합니다.
채팅
이메일
전화해