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:
- O método Enumerable.AsEnumerable pode ser usado para ocultar a implementação personalizada de um tipo de um operador de consulta padrão.
- O método Enumerable.OfType pode ser usado para habilitar coleções sem parâmetros para consulta LINQ.
- Os métodos Enumerable.ToArray, Enumerable.ToDictionary, Enumerable.ToList e Enumerable.ToLookup podem ser usados para forçar a execução de consulta imediata em vez de adiá-la até que a consulta seja enumerada.
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);
}