Compartilhar via


Convertendo Tipos de Dados (C#)

Os métodos de conversão alteram o tipo dos objetos de entrada.

Importante

Esses exemplos usam uma fonte de dados System.Collections.Generic.IEnumerable<T>. Fontes de dados baseadas em System.Linq.IQueryProvider usam as fontes de dados System.Linq.IQueryable<T> e as árvores de expressão. As árvores de expressão possuem limitações na sintaxe C# permitida. Além disso, todas as fontes de dados IQueryProvider, como EF Core, podem impor mais restrições. Verifique a documentação da fonte de dados.

As operações de conversão em consultas LINQ são úteis em diversos aplicativos. A seguir estão alguns exemplos:

Métodos

A tabela a seguir lista os métodos de operador de consulta padrão que realizam conversões de tipo de dados.

Os métodos de conversão nesta tabela cujos nomes começam com "As" alteram o tipo estático da coleção de origem, mas não a enumeram. Os métodos cujos nomes começam com "To" enumeram a coleção de origem e colocam os itens na coleção de tipo correspondente.

Nome do método Descrição Sintaxe de expressão de consulta C# Mais informações
AsEnumerable Retorna a entrada digitada como IEnumerable<T>. Não aplicável. Enumerable.AsEnumerable
AsQueryable Converte um IEnumerable (genérico) em um IQueryable (genérico). Não aplicável. Queryable.AsQueryable
Conversão Converte os elementos de uma coleção em um tipo especificado. Use uma variável de intervalo de tipo explícito. Por exemplo:

from string str in words
Enumerable.Cast

Queryable.Cast
OfType Filtra valores, dependendo da capacidade de serem convertidos em um tipo especificado. Não aplicável. Enumerable.OfType

Queryable.OfType
ToArray Converte uma coleção em uma matriz. Esse método força a execução de consulta. Não aplicável. Enumerable.ToArray
ToDictionary Coloca os elementos em um Dictionary<TKey,TValue> com base em uma função de seletor de chave. Esse método força a execução de consulta. Não aplicável. Enumerable.ToDictionary
ToList Converte uma coleção em um List<T>. Esse método força a execução de consulta. Não aplicável. Enumerable.ToList
ToLookup Coloca os elementos em um Lookup<TKey,TElement> (um dicionário one-to-many) com base em uma função de seletor de chave. Esse método força a execução de consulta. Não aplicável. Enumerable.ToLookup

Observação

Os exemplos a seguir neste artigo usam as fontes de dados comuns para essa área.
Cada Student tem um nível de escolaridade, um departamento primário e uma série de pontuações. Um Teacher também tem uma propriedade City que identifica o campus onde o docente ministra aulas. A Department tem um nome e uma referência a um Teacher que atua como chefe do departamento.
Você pode encontrar o conjunto de dados de exemplo no repositório de origem.

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

Exemplo de sintaxe de expressão de consulta

O exemplo de código a seguir usa uma variável de intervalo de tipo explícito para converter um tipo em um subtipo antes de acessar um membro que está disponível somente no subtipo.

IEnumerable people = students;

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

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

A consulta equivalente pode ser expressa usando a sintaxe do método, conforme mostrado no seguinte exemplo:

IEnumerable people = students;

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

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

Confira também