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

C# ile programlama alanında, bir DataTable'yi listeye dönüştürme ihtiyaçı sıkça doğar. Birçok acemi bu görevle karşılaşır, ancak genellikle yeterince kapsamlı olmayan yanıtlarla karşılaşırlar. Bu eğitim, bu boşluğu kapatmayı ve C#'ta bir DataTable'yi listeye nasıl dönüştüreceğinize dair net bir rehber sağlamayı amaçlamaktadır.

DataTable nedir?

Dönüştürme sürecine dalmadan önce, bir DataTable'nin ne olduğunu anlamak önemlidir. C#'ta, bir DataTable nesnesi, hafızada satır ve sütunlarla temsil edilen bir veritabanı tablosunun bir temsilidir. Bu, System.Data ad alanının bir parçasıdır.

Bu eğitim adına, dt adlı örnek bir 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üşümle Başlamak

Yani, elinizde bir DataTable dt var ve şimdi buna bakarak, 'Bunu nasıl dönüştürürüm?' diye düşünüyorsunuz. Endişelenmeyin; bu, araştırma çabası gösteren bir sorudur. Temelde DataTable'yi bir listeye dönüştürmenin iki yöntemi vardır:

  1. LINQ (Dil Entegrasyonlu Sorgu) kullanarak
  2. Klasik foreach döngüsünü kullanma

LINQ Kullanarak Dönüşüm

LINQ yöntemi, koleksiyonları deklaratif bir şekilde sorgulamanıza olanak tanıyan C#'da güçlü bir araçtır. Bu nasıl yapılabilir, 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, AsEnumerable() genişletme yöntemi DataTable dt üzerinde çağrılır. Bu, DataTable içindeki her bir DataRow üzerinde LINQ kullanmamızı sağlar. Yöntem, her biri DataTable'den bir satırı temsil eden dinamik nesnelerden bir liste oluşturur.

foreach Döngüsünü Kullanarak Dönüştürme

foreach döngüsü, C#'ta koleksiyonlar üzerinde yineleme yapmak için denenmiş ve onaylanmış bir yöntemdir. 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 üzerinde dönülür. Her DataRow için yeni bir Category nesnesi oluşturulur ve list'ye eklenir.

Gelişmiş Dönüşüm Tekniklerinin Genişletilmesi

C#'ta bir DataTable'yi listeye dönüştürmenin temellerini ustaca öğrendikten sonra, bu süreci optimize edebilecek ve daha karmaşık senaryolara uyum sağlayabilecek birkaç ileri teknik ve değerlendirme vardır. Bu tekniklerden bazılarını daha derinlemesine inceleyelim.

DataTable'yi Listeye Dönüştürmek için Yansımayı Kullanma

Reflection, çalışma zamanında türlerin meta verilerini incelemenize olanak tanıyan C#'da güçlü bir araçtır. Gücünden yararlanalı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, her bir DataRow ve DataTable'daki sütun üzerinde yineleme yaparak yansımayı kullanır. Her sütun için, genel nesnede eşleşen bir özelliği arar ve değerini ayarlar. Bu yaklaşım, her türlü DataTable'yi genel nesnelerin bir listesine dönüştürebilen yüksek derecede yeniden kullanılabilir bir yöntem sağlar.

Kullanımı

Yukarıdaki kodu kullanmak için, türü belirtmek suretiyle metodu ç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ı kalmazsınız. Bunun yerine, farklı veri senaryolarını yönetebilen çok yönlü bir aracınız vardır.

Performans Dikkat Edilecek Noktalar

Her ne kadar reflection yöntemi güçlü olsa da, özellikle büyük veri tablolarında daha yavaş olabileceğine dikkat çekmek önemlidir. Performansı ölçmek ve kodun tekrar kullanılabilirliği ve sürdürülebilirliği ile karşılaştırmak her zaman önemlidir.

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

Her ne kadar C#'ta DataTable'yi listelere dönüştürmenin ayrıntılarına düşmüş olsak da, bazen dış araçlara güvenmek, geliştirici sürecimizi basitleştirebilir, özellikle daha karmaşık işlemler söz konusu olduğunda. İşte Iron Suite burada devreye girer.

IronPDF: PDF Güç Evi

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

C#'da PDF'lerle çalışmak söz konusu olduğunda, IronPDF bir oyunu değiştiricidir. Düşünsenize DataTable'nizi listeye dönüştürmüşsünüz ve sonra bundan bir PDF raporu oluşturmanız gerekiyor. IronPDF, PDF belgelerinden veri oluşturma, düzenleme ve çıkarma işlemleriyle belgenizi profesyonel görünümlü raporlar haline getirme sürecini kolaylaştırır.

IronPDF'in ana özelliği HTML'den PDF'e dönüştürme işlevselliğidir. Bu, düzenlerin ve stillerin korunmasını sağlar. Rapolar, faturalar ve belgeler için web içeriğinden PDF'ler üretir. HTML dosyalarını, URL'leri ve HTML dizelerini PDF dosyalarına zahmetsizce 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 Başarıya Ulaşma

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

Eğer DataTable'nin dönüştürülmesi Excel ile ilgili görevlere neden oluyorsa, IronXL başvurulacak araçtır. Bu ürün, Excel e-tablolarını okuma, düzenleme ve oluşturma konularında sorunsuz işlemler sağlar. Veri tablosu-liste dönüşümü yöntemiyle, verilerinizi Excel formatına aktarmak IronXL ile inanılmaz derecede kolaylaşır.

IronOCR: Metni Tanınabilir Hale Getirme

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

Bazen DataTable görüntü tabanlı veriler içerebilir veya görüntülerden metin çıkarmanız gerekebilir. Burada IronOCR önü açar. .NET geliştiricilerinin görüntülerden metin okumasını sağlar, bu nedenle eğer DataTable dönüştürme işlemleriniz metin bilgisi içeren görüntüler içeriyorsa tamamlayıcı bir araçtır.

IronBarcode: Satır Aralarını Okuma

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

Son olarak, IronBarcode, uygulamalarınızda herhangi bir barkod işlemi için gidilecek araçtır. Varsayalım DataTable veya onu dönüştürdüğünüz liste, barkodlu ürün bilgileri içeriyor. Bu durumda, IronBarcode ham ürün verileri ile taranabilir barkod bilgileri arasında bir köprü sağlar ve barkodları verimli bir şekilde okuyup oluşturur.

Sonuç

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

Her ne kadar DataTable'yi elle manipüle etme ve dönüştürme yöntemleri herhangi bir C# geliştiricisi için çok önemli olsa da, Iron Suite gibi güçlü araçları entegre etmek, üretkenliğinizi ve yeteneklerinizi büyük ölçüde artırabilir. Önemli olan, her ürün lisansının $799'den başladığı ve daha da çekici olanın, her ürünün ücretsiz deneme sunduğudur. Bu araçlara yatırım yapmayı düşünüyorsanız, masada cazip bir teklif var: tüm Iron Suite'i satın alabilir ve sadece iki ürünün fiyatını ödeyebilirsiniz. Böylesi kapsamlı çözümleri benimsemek, .NET geliştirme çabalarınızın kalitesini ve verimliliğini kuşkusuz artırır.

Sıkça Sorulan Sorular

C#'da bir DataTable nedir?

C#'da bir DataTable, satirlar ve sutunlardan oluşan bir veritabanı tablosunun bellekteki temsilidir. System.Data isim alanının bir parcasidir.

C#'da LINQ kullanarak bir DataTable'yi listeye nasıl ceviririm?

LINQ kullanarak bir DataTable'i listeye dönüştürebilirsiniz. Bunu, AsEnumerable() metoduyla her bir DataRow'u yineleyerek ve Select kullanarak her satırı temsil eden dinamik nesneler listesini oluşturarak yapabilirsiniz.

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

Bir DataTable'i listeye dönüştürmek için, her bir DataRow'u yineleyin, her satır için yeni bir nesne oluşturun, özelliklerini DataRow'dan doldurun ve listeye ekleyin.

C# dilinde yansıma (reflection) DataTable dönüştürmeyi nasıl geliştirir?

Yansıma kullanmak, herhangi bir DataTable'i dinamik olarak DataTable sütunlarını nesne özelliklerine eşleyerek bir genel nesneler listesine dönüştürebilen son derece yeniden kullanılabilir bir yönteme olanak tanır.

IronPDF, DataTables'ten türetilen PDF'lerle ilgili işlemlerde nasıl yardımcı olabilir?

IronPDF geliştiricilerin PDF belgeleri oluşturmasına, düzenlemesine ve verileri çıkarmasına olanak tanır, bu da DataTable'dan türetilmiş verilerle rapor hazırlamak için faydalıdır.

IronXL C# dilinde Excel işlemleri için ne gibi avantajlar sağlar?

IronXL, DataTables'ten Excel formatına veri ihraç etmeyi kolaylaştırır, geliştiricilerin Excel elektronik tablolarını verimli bir şekilde okumasını, düzenlemesini ve oluşturmasını sağlar.

IronOCR DataTables'e hangi şekillerde uygulanabilir?

IronOCR, DataTables içindeki resimlerden metin okuma kabiliyetine sahiptir, bu da metinsel bilgi içeren resim tabanlı verileri işlemek için geliştiricilere olanak tanır.

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

IronBarcode, barkodları okuyup üretme yeteneği sağlar, bu da barkod içeren ürün bilgilerini içeren DataTables veya listeler için yararlıdır.

DataTable dönüştürme için yansıma kullanıldığında hangi performans değerlendirmeleri göz önünde bulundurulmalıdır?

Yansıma esneklik sunarken, özellikle büyük veri tablolarında diğer yöntemlerden daha yavaş olabilir, bu nedenle performansı tekrar kullanılabilirlik ve sürdürülebilirlikle dengelemek önemlidir.

Iron Software ürünleri için lisanslama ve deneme fırsatları mevcut mu?

Evet, makale Iron Suite ürünleri için, geliştiricilerin satın almadan önce araçları değerlendirmelerine olanak tanıyan lisanslama ve deneme fırsatlarının mevcut olduğunu belirtiyor.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

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