Altbilgi içeriğine atla
.NET YARDıM

C# Datatable'dan Listeye (Geliştiriciler İçin Nasıl Çalışır)

Converting DataTable to List in C

Genellikle C# ile programlama alanında, bir DataTable'yi listeye dönüştürme ihtiyacı ortaya çıkar. Birçok yeni başlayan bu görevin üzerinde takılıp kalırken, genelde yeterince kapsamlı olmayan yanıtlarla karşılaşırlar. Bu eğitim, o boşluğu doldurmayı ve C# dilinde bir DataTable'yi listeye dönüştürmenin nasıl yapılacağını açıklayan net bir kılavuz sunmayı hedefliyor.

DataTable nedir?

Dönüşüm sürecine dalmadan önce, bir DataTable'nin ne olduğu önemlidir. C# dilinde, bir DataTable nesnesi, satır ve sütunlardan oluşan bellek içi bir veritabanı tablosunun temsildir. System.Data ad alanının bir parçasıdır.

Bu eğitim için, dt adlı bir örnek DataTable kullanalım. Bu, aşağıda gösterildiği gibi görselleştirilebilir:

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

Dönüşüme Başlarken

Elinizdeki DataTable dt'ye baktığınızda, 'Bunu nasıl dönüştürürüm?' diye düşünüyorsunuz. Endişelenmeyin; bu, araştırma çabasını gösteren bir soru. DataTable'yı listeye dönüştürmenin iki temel yöntemi vardır:

  1. LINQ (Dil Entegre Sorgusu) kullanmak
  2. Klasik foreach döngüsünü kullanarak

LINQ Kullanarak Dönüşüm

LINQ yöntemi, C# dilinde koleksiyonları deklaratif bir şekilde sorgulama imkanı sunan güçlü bir araçtır. Bunun nasıl yapılabileceğine bir göz atalım.

Aşağıdaki gibi bir yöntem tanımlayın:

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

Yukarıdaki kodda, DataTable dt üzerinde AsEnumerable() genişletme metodu çağrıldı. Bu, her DataRow üzerinde LINQ kullanmamızı sağlıyor. Yöntem, DataTable'dan bir satırı temsil eden her dinamik nesne için bir liste oluşturur.

foreach Döngüsü Kullanarak Dönüşüm

C# dilinde koleksiyonlar üzerinde yinelenmiş ve test edilmiş bir yol foreach döngüsüdür. Bu yöntem biraz daha uzun görünebilir, ancak anlaması ve uygulaması kolaydır.

İşte nasıl çalıştığı:

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 yönteminde, DataTable bir foreach döngüsü kullanılarak yinelemeyle işlenir. Her DataRow için yeni bir Category nesnesi oluşturulur ve list'ye eklenir.

Gelişmiş Dönüştürme Tekniklerini Genişletme

C# dilinde bir DataTable'yi listeye dönüştürmenin temellerini öğrendikten sonra, bu süreci optimize edebilecek ve daha karmaşık senaryolara uyarlayabilecek birkaç ileri teknik ve düşünce bulunur. Bazı bu tekniklere daha derinlemesine bakalım.

Reflective Kullanarak DataTable'yi Listeye Dönüştürme

Reflection, C#'da türlerin meta verilerini çalışma zamanında incelemenizi sağlayan güçlü bir araçtır. Gücünü kullanmaya başlayalım:

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

Bu ConvertDataTableToList yöntemi, DataRow ve DataTable üzerindeki her bir üzerinde yansıtmalı bir işlem yapar. Her sütun için, genel nesnede eşleşen bir özellik arar ve değerini ayarlar. Bu yaklaşım, herhangi bir DataTable'yi genel nesneler listesine dönüştüren yüksek derecede tekrar kullanılabilir bir yöntem sunar.

Kullanım

Yukarıdaki kodu kullanmak için, yöntemi türü belirterek basitçe çağırın:

List<Category> categories = ConvertDataTableToList<Category>(dt);
List<Category> categories = ConvertDataTableToList<Category>(dt);
Dim categories As List(Of Category) = ConvertDataTableToList(Of Category)(dt)
$vbLabelText   $csharpLabel

Bu yöntemle, belirli veri tablolarını belirli nesne türlerine dönüştürmekle sınırlı kalmıyorsunuz. Bunun yerine, çeşitli veri senaryolarını yönetebilecek çok yönlü bir araca sahip oluyorsunuz.

Performans Dikkat Edilecek Hususlar

Yansıma yöntemi güçlü olmakla birlikte, özellikle büyük veri tablolarıyla çalışırken daha yavaş olabileceğini belirtmekte fayda var. Performansı ölçmek ve bunu kodun yeniden kullanılabilirliği ve sürdürülebilirliği ile karşılaştırmak her zaman çok önemlidir.

.NET Geliştiricileri için Iron Suite Araç Seti

C# dilinde DataTable'yi listeye dönüştürmenin inceliklerine daldık, bazen dış araçlara güvenmek geliştirme sürecimizi basitleştirebilir, özellikle daha karmaşık işlemlerde. Iron Suite'in devreye girdiği yer burası.

IronPDF: PDF Güç Merkezi

C# DataTable'dan Listeye (Geliştiriciler İçin Nasıl Çalışır) Şekil 1 - IronPDF for .NET: C# PDF Kütüphanesi

C# ile PDF'lerle çalışırken, IronPDF bir oyun değiştiricidir. Dönüştürdüğünüz DataTable'yi bir listeye dönüştürdüğünüzü ve ardından bir PDF raporu oluşturmanız gerektiğini hayal edin. IronPDF, PDF belgelerini zahmetsizce oluşturabilir, düzenleyebilir ve verileri çıkarabilir, veri tablo türevi bilgilerinizi profesyonel görünümlü raporlara dönüştürme sürecini kolaylaştırır.

IronPDF'nin ana özelliği, düzenlerin ve stillerin korunmasını sağlayan HTML to PDF fonksiyonelliğidir. Web içeriğinden PDF oluşturur, raporlar, faturalar ve dokümantasyon için uygundur. HTML dosyalarını, URL'leri ve HTML metinlerini zahmetsizce PDF dosyalarına dönüştürebilirsiniz.

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 İşlemlerinde Mükemmellik

C# DataTable'dan Listeye (Geliştiriciler İçin Nasıl Çalışır) Şekil 2 - IronXL for .NET: C# Excel Kütüphanesi

Eğer DataTable dönüşümünüz Excel ile ilgili işleri gerektiriyorsa, IronXL başvurulacak araçtır. Bu ürün, Excel tablolarını okuma, düzenleme ve oluşturma işlemlerini sorunsuz bir şekilde sağlar. Tablo-veri-listesine dönüştürme ile elinizde, verilerinizi Excel formatına aktarmak IronXL ile inanılmaz derecede basit hale gelir.

IronOCR: Metni Tanınır Hale Getirmek

C# DataTable'dan Listeye (Geliştiriciler İçin Nasıl Çalışır) Şekil 3 - IronOCR for .NET: C# OCR Kütüphanesi

Bazı zamanlarda DataTable görüntü tabanlı veriler içerebilir veya görüntülerden metin çıkarmanız gerekebilir. Burası, IronOCR'un parladığı yerdir. Bu, .NET geliştiricilerinin görüntülerden metin okumasını sağlar, bu durumda DataTable dönüştürme işlemleriniz metin içeren görüntüler içeriyorsa tamamlayıcı bir araç olur.

IronBarcode: Satır Aralarını Okuma

C# DataTable'dan Listeye (Geliştiriciler İçin Nasıl Çalışır) Şekil 4 - IronBarcode for .NET: C# Barcode Kütüphanesi

Son olarak, IronBarcode, uygulamalarınızdaki herhangi bir barcode işlemi için başvuracağınız araçtır. Varsayalım ki DataTable ya da bunu dönüştürdüğünüz liste ürün bilgileri ve barkodları içeriyor. Bu durumda, IronBarcode, ham ürün verileri ile taranabilir barkod bilgisi arasındaki boşluğu kapatarak barkodları okuma ve oluşturma için verimli bir mekanizma sağlar.

Sonuç

C# DataTable'dan Listeye (Geliştiriciler İçin Nasıl Çalışır) Şekil 5 - Iron Suite: Lisans bilgileri

C# geliştiricileri için DataTable'yi elle kullanma ve dönüştürme yöntemleri önemliyken, Iron Suite tarafından sağlanan güçlü araçları entegre etmek, verimliliğinizi ve yeteneklerinizi kat kat artırabilir. Her ürün lisansının $999'den başladığı ve her ürünün bir ücretsiz deneme sunduğu dikkat çekicidir. Bu araçlara yatırım yapmayı düşünüyorsanız, cazip bir teklif var: tüm Iron Suite'i sadece iki ürün fiyatına edinebilirsiniz. Böylesine kapsamlı çözümleri benimsemek, .NET geliştirme çabalarınızın kalitesini ve verimliliğini şüphesiz artırabilir.

Sıkça Sorulan Sorular

C#'de DataTable nedir?

C#'de DataTable, bir veritabanı tablosunun sıralar ve sütunlardan oluşan bellek içi temsilidir. System.Data ad alanının bir parçasıdır.

C#'de LINQ kullanarak bir DataTable'i listeye nasıl dönüştürebilirim?

LINQ kullanarak bir DataTable'i listeye dönüştürebilmek için AsEnumerable() yöntemini kullanarak her bir DataRow üzerinde dolaşabilir ve Select kullanarak her bir satırı temsil eden dinamik nesne listesini oluşturabilirsiniz.

C#'de bir foreach döngüsü kullanarak bir DataTable'i listeye dönüştürme süreci nedir?

Bir foreach döngüsü kullanarak bir DataTable'i listeye dönüştürmek için her bir DataRow üzerinde gezinin, her satır için yeni bir nesne örneği oluşturun, DataRow'dan özelliklerini doldurun ve listeye ekleyin.

Yansıma, C#'de DataTable dönüştürmesini nasıl geliştirir?

Yansıma kullanmak, herhangi bir DataTable'i dinamik olarak DataTable sütunlarını nesne özelliklerine eşleyerek genel nesneler listesine dönüştürebilecek oldukça yeniden kullanılabilir bir yöntem sağlar.

IronPDF, DataTable'lerden türetilen PDF'leri işlerken nasıl yardımcı olabilir?

IronPDF, geliştiricilerin PDF belgelerini oluşturmasına, düzenlemesine ve verileri çıkartmasına olanak tanır, bu da DataTable türevi verilerden rapor üretmek için yararlıdır.

IronXL, C#'de Excel işlemleri için hangi avantajları sağlar?

IronXL, DataTable'lerden Excel formatına veri ihracını sağlar, böylece geliştiricilerin Excel elektronik tablolarını kolayca okuyup, düzenleyip ve oluşturmasına olanak tanır.

IronOCR, DataTable'lere hangi şekillerde uygulanabilir?

IronOCR, DataTable'lerdeki görüntülerden metin okuyabilir, geliştiricilerin metin bilgisi içeren görüntü tabanlı verileri işlemelerine olanak tanır.

IronBarcode, barkodlarla DataTable işlemlerini nasıl geliştirir?

IronBarcode, barkodları okuma ve oluşturma yeteneği sağlar, bu da barkod içeren ürün bilgilerine sahip DataTable'ler veya listeler için faydalıdır.

DataTable dönüştürmesi için yansıma kullanırken hangi performans hususlarına dikkat edilmelidir?

Yansıma esneklik sunarken, diğer yöntemlerden daha yavaş olabilir, özellikle büyük veri tablolarıyla, bu yüzden performansı tekrar kullanılabilirlik ve bakım kolaylığı ile dengelemek önemlidir.

Iron Software ürünleri için lisanslama ve deneme fırsatları var mı?

Evet, makalede Iron Suite ürünleri için lisanslama ve deneme fırsatlarının mevcut olduğundan bahsedilmektedir, bu da geliştiricilerin satın almadan önce araçları değerlendirmesine olanak tanır.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara