Convertendo tipos de dados (C#)

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

Importante

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

As operações de conversão em consultas LINQ são úteis em várias aplicações. Seguem-se alguns exemplos:

Métodos

A tabela a seguir lista os métodos de operador de consulta padrão que executam 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 "Para" enumeram a coleção de origem e colocam os itens no tipo de coleção correspondente.

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

from string str in words
Enumerable.Cast

Queryable.Cast
OfType Filtra valores, dependendo da sua capacidade de serem convertidos para 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 da consulta. Não aplicável. Enumerable.ToArray
ToDictionary Coloca 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 uma consulta. Não aplicável. Enumerable.ToDictionary
Lista de Tarefas Converte uma coleção em um List<T>. Esse método força a execução da consulta. Não aplicável. Enumerable.ToList
ToLookup Coloca elementos em um Lookup<TKey,TElement> (um dicionário um-para-muitos) de acordo com uma função seletora de chaves. Esse método força a execução da consulta. Não aplicável. Enumerable.ToLookup

Nota

Os exemplos a seguir neste artigo usam as fontes de dados comuns para essa área.
Cada Student tem um nível de grau, um departamento principal e uma série de classificações. A Teacher também tem uma City propriedade que identifica o campus onde o professor tem aulas. A Department tem um nome, e uma referência a um Teacher que serve como chefe de 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; }
}

Nota

Você pode consultar as fontes de dados comuns para essa área no artigo Visão geral dos operadores de consulta padrão .

Exemplo de sintaxe de expressão de consulta

O exemplo de código a seguir usa uma variável de intervalo explicitamente tipada 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 people
            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 exemplo a seguir:

IEnumerable people = students;

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

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

Consulte também