Adattípusok konvertálása (C#)

A konvertálási módszerek megváltoztatják a bemeneti objektumok típusát.

Fontos

Ezek a minták adatforrást System.Collections.Generic.IEnumerable<T> használnak. Az System.Linq.IQueryProvider-alapú adatforrások System.Linq.IQueryable<T> adatokforrásokat és kifejezésfákat használnak. A kifejezésfák korlátozottan használhatják az engedélyezett C# szintaxist. Emellett minden adatforrás IQueryProvider , például az EF Core további korlátozásokat is alkalmazhat. Ellenőrizze az adatforrás dokumentációját.

A LINQ-lekérdezések konverziós műveletei különböző alkalmazásokban hasznosak. Az alábbiakban néhány példát mutatunk be:

Metódusok

Az alábbi táblázat az adattípus-átalakításokat végző szabványos lekérdezési operátori metódusokat sorolja fel.

A táblázatban szereplő konverziós metódusok, amelyeknek a neve "As" néven kezdődik, megváltoztatják a forrásgyűjtemény statikus típusát, de nem számbavételt. Azok a metódusok, amelyeknek a neve a "To" kezdetű, számba adja a forrásgyűjteményt, és az elemeket a megfelelő gyűjteménytípusba helyezi.

Eljárás neve Leírás C# lekérdezési kifejezés szintaxisa További információ
AsEnumerable A beírt értéket adja eredményül IEnumerable<T>. Nem alkalmazható. Enumerable.AsEnumerable
AsQueryable általános IEnumerable -t konvertál általános IQueryable-vé. Nem alkalmazható. Queryable.AsQueryable
Öntvény Egy gyűjtemény elemeit egy megadott típusra veti. Használjon explicit módon beírt tartományváltozót. Példa:

from string str in words
Enumerable.Cast

Queryable.Cast
OfType Az értékeket attól függően szűri, hogy egy adott típusba szeretnének-e beszűkíteni őket. Nem alkalmazható. Enumerable.OfType

Queryable.OfType
ToArray Gyűjteményt tömbbé alakít át. Ez a metódus kényszeríti a lekérdezés végrehajtását. Nem alkalmazható. Enumerable.ToArray
ToDictionary Elemeket helyez el egy Dictionary<TKey,TValue> kulcsválasztó függvény alapján. Ez a metódus kényszeríti a lekérdezés végrehajtását. Nem alkalmazható. Enumerable.ToDictionary
ToList Gyűjteményt List<T>konvertál . Ez a metódus kényszeríti a lekérdezés végrehajtását. Nem alkalmazható. Enumerable.ToList
ToLookup Elemeket helyez egy Lookup<TKey,TElement> (egy-a-többhöz) szótárba egy kulcsválasztó függvény alapján. Ez a metódus kényszeríti a lekérdezés végrehajtását. Nem alkalmazható. Enumerable.ToLookup

Megjegyzés

A cikkben szereplő alábbi példák a terület közös adatforrásait használják.
Mindegyiknek Student van egy osztályszintje, egy elsődleges tanszéke és egy sor pontszáma. A Teacher elemnek is van egy City tulajdonsága, amely azonosítja azt a campust, ahol a tanár órákat tart. A Department nevet visel, és egy Teacher-ra van hivatkozással, aki az osztályvezető.
A mintaadatkészlet a forrásadattárban található.

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; }
}

Megjegyzés

A terület gyakori adatforrásai a Standard lekérdezési operátorok áttekintése című cikkben találhatóak.

Példa lekérdezési kifejezés szintaxisára

Az alábbi kód példa egy explicit módon beírt tartományváltozót használ egy típus altípusba való beírásához, mielőtt hozzáfér egy olyan taghoz, amely csak az altípuson érhető el.

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);
}

Az egyenértékű lekérdezés a következő példában látható metódusszintaxissal fejezhető ki:

IEnumerable people = students;

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

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

Lásd még