Sdílet prostřednictvím


Převod datových typů (C#)

Metody převodu mění typ vstupních objektů.

Důležité

Tyto ukázky používají System.Collections.Generic.IEnumerable<T> zdroj dat. Zdroje dat založené na System.Linq.IQueryProvider použití System.Linq.IQueryable<T> zdrojů dat a stromů výrazů Stromy výrazů mají omezení povolené syntaxe jazyka C#. Každý zdroj dat, například IQueryProvider, může navíc uplatňovat další omezení. Projděte si dokumentaci ke zdroji dat.

Operace převodu v dotazech LINQ jsou užitečné v různých aplikacích. Tady je několik příkladů:

Metody

Následující tabulka uvádí standardní metody operátoru dotazu, které provádějí převody datových typů.

Metody převodu v této tabulce, jejichž názvy začínají na "As", změní statický typ zdrojové kolekce, ale nevyčtou ji. Metody, jejichž názvy začínají na "To" výčet zdrojové kolekce a umístí položky do odpovídajícího typu kolekce.

Název metody Popis Syntaxe výrazu dotazu jazyka C# Další informace
AsEnumerable Vrátí zadaný vstup jako IEnumerable<T>. Nevztahuje se. Enumerable.AsEnumerable
AsQueryable Převede (obecný) IEnumerable na (obecný) IQueryable. Nevztahuje se. Queryable.AsQueryable
Změna typu Přetypuje prvky kolekce na zadaný typ. Použijte explicitně typovanou proměnnou rozsahu. Příklad:

from string str in words
Enumerable.Cast

Queryable.Cast
Typ Filtruje hodnoty v závislosti na jejich schopnosti přetypovat na zadaný typ. Nevztahuje se. Enumerable.OfType

Queryable.OfType
ToArray Převede kolekci na pole. Tato metoda vynutí provádění dotazů. Nevztahuje se. Enumerable.ToArray
Slovník Vloží elementy Dictionary<TKey,TValue> do funkce selektoru klíče. Tato metoda vynutí provádění dotazů. Nevztahuje se. Enumerable.ToDictionary
Seznam úkolů Převede kolekci na .List<T> Tato metoda vynutí provádění dotazů. Nevztahuje se. Enumerable.ToList
ToLookup Umístí prvky do slovníku Lookup<TKey,TElement> 1:N na základě funkce selektoru klíčů. Tato metoda vynutí provádění dotazů. Nevztahuje se. Enumerable.ToLookup

Poznámka:

Následující příklady v tomto článku používají společné zdroje dat pro tuto oblast.
Každý z nich Student má úroveň známek, primární oddělení a řadu výsledků. A TeacherCity také vlastnost, která identifikuje areál, kde učitel má předměty. A Department má jméno a odkaz na Teacher toho, kdo slouží jako vedoucí oddělení.
Ukázkové datové sady najdete ve zdrojovém úložišti.

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

Poznámka:

Běžné zdroje dat pro tuto oblast najdete v článku Přehled standardních operátorů dotazů .

Příklad syntaxe výrazu dotazu

Následující příklad kódu používá explicitně typovou proměnnou rozsahu k přetypování typu na podtyp před přístupem k členu, který je k dispozici pouze u podtypu.

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

Ekvivalentní dotaz lze vyjádřit pomocí syntaxe metody, jak je znázorněno v následujícím příkladu:

IEnumerable people = students;

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

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

Viz také