Aracılığıyla paylaş


Veri Türlerini Dönüştürme (C#)

Dönüştürme yöntemleri, giriş nesnelerinin türünü değiştirir.

Önemli

Bu örnekler bir System.Collections.Generic.IEnumerable<T> veri kaynağı kullanır. Veri kaynaklarını ve System.Linq.IQueryProviderkullanan System.Linq.IQueryable<T> veri kaynakları. İfade ağaçlarının izin verilen C# söz diziminde sınırlamaları vardır. Ayrıca EF CoreIQueryProviderher veri kaynağı daha fazla kısıtlama uygulayabilir. Veri kaynağınızın belgelerine bakın.

LINQ sorgularındaki dönüştürme işlemleri çeşitli uygulamalarda kullanışlıdır. Aşağıda bazı örnekler verilmiştir:

Yöntemler

Aşağıdaki tabloda, veri türü dönüştürmeleri gerçekleştiren standart sorgu işleç yöntemleri listelemektedir.

Adları "Farklı" ile başlayan bu tablodaki dönüştürme yöntemleri, kaynak koleksiyonun statik türünü değiştirir ancak numaralandırmaz. Adları "Kime" ile başlayan yöntemler kaynak koleksiyonu numaralandırır ve öğeleri ilgili koleksiyon türüne koyar.

Yöntem Adı Açıklama C# Sorgu İfadesi Söz Dizimi Daha Fazla Bilgi
AsEnumerable olarak IEnumerable<T>yazılan girişi döndürür. Uygulanamaz. Enumerable.AsEnumerable
AsQueryable Bir (genel) öğesini (genel) IEnumerableIQueryableöğesine dönüştürür. Uygulanamaz. Queryable.AsQueryable
Oyuncu Kadrosu Bir koleksiyonun öğelerini belirtilen bir türe yayınlar. Açıkça yazılan bir aralık değişkeni kullanın. Örneğin:

from string str in words
Enumerable.Cast

Queryable.Cast
OfType Değerleri, belirtilen türe atanma yeteneklerine bağlı olarak filtreler. Uygulanamaz. Enumerable.OfType

Queryable.OfType
ToArray Bir koleksiyonu diziye dönüştürür. Bu yöntem sorgu yürütmeyi zorlar. Uygulanamaz. Enumerable.ToArray
ToDictionary Öğeleri bir Dictionary<TKey,TValue> anahtar seçici işlevine yerleştirir. Bu yöntem sorgu yürütmeyi zorlar. Uygulanamaz. Enumerable.ToDictionary
ToList Bir koleksiyonu öğesine List<T>dönüştürür. Bu yöntem sorgu yürütmeyi zorlar. Uygulanamaz. Enumerable.ToList
ToLookup Öğeleri bir anahtar seçici işlevine göre bire Lookup<TKey,TElement> çok sözlüğe yerleştirir. Bu yöntem sorgu yürütmeyi zorlar. Uygulanamaz. Enumerable.ToLookup

Not

Bu makaledeki aşağıdaki örneklerde bu alan için ortak veri kaynakları kullanılır.
Her Student birinin bir not düzeyi, bir birincil bölüm ve bir dizi puanı vardır. Ayrıca, Teacher öğretmenin ders aldığı kampüsü tanımlayan bir City özelliği de vardır. A'nın Department bir adı ve bölüm başkanı olarak görev yapan bir Teacher kişi için bir referansı vardır.
Örnek veri kümesini kaynak depoda bulabilirsiniz.

public enum GradeLevel
{
    FirstYear = 1,
    SecondYear,
    ThirdYear,
    FourthYear
};

public class Student
{
    public required string FirstName { get; init; }
    public required string LastName { get; init; }
    public required int ID { get; init; }

    public required GradeLevel Year { get; init; }
    public required List<int> Scores { get; init; }

    public required int DepartmentID { get; init; }
}

public class Teacher
{
    public required string First { get; init; }
    public required string Last { get; init; }
    public required int ID { get; init; }
    public required string City { get; init; }
}

public class Department
{
    public required string Name { get; init; }
    public int ID { get; init; }

    public required int TeacherID { get; init; }
}

Not

Standart Sorgu İşleçlerine Genel Bakış makalesinde bu alanın ortak veri kaynaklarına bakabilirsiniz.

Sorgu İfadesi Söz Dizimi Örneği

Aşağıdaki kod örneği, yalnızca alt tür üzerinde kullanılabilen bir üyeye erişmeden önce bir türü alt türe yazmak için açıkça yazılmış bir aralık değişkeni kullanır.

IEnumerable people = students;

var query = from Student student in people
            where student.Year == GradeLevel.ThirdYear
            select student;

foreach (Student student in query)
{
    Console.WriteLine(student.FirstName);
}

Eşdeğer sorgu, aşağıdaki örnekte gösterildiği gibi yöntem söz dizimi kullanılarak ifade edilebilir:

IEnumerable people = students;

var query = people
    .Cast<Student>()
    .Where(student => student.Year == GradeLevel.ThirdYear);

foreach (Student student in query)
{
    Console.WriteLine(student.FirstName);
}

Ayrıca bkz.