Convertir tipos de datos (C#)

Los métodos de conversión cambian el tipo de los objetos de entrada.

Las operaciones de conversión en las consultas LINQ son útiles en una serie de aplicaciones. A continuación se muestran algunos ejemplos:

Métodos

En la siguiente tabla se muestran los métodos de operadores de consulta estándar que efectúan conversiones de tipo de datos.

Los métodos de conversión de esta tabla cuyos nombres comienzan por "As" cambian el tipo estático de la colección de origen, pero no lo enumeran. Los métodos cuyos nombres empiezan por "To" enumeran la colección de origen y colocan los elementos en el tipo de colección correspondiente.

Nombre del método Descripción Sintaxis de la expresión de consulta de C# Más información
AsEnumerable Devuelve la entrada con tipo como IEnumerable<T>. No es aplicable. Enumerable.AsEnumerable
AsQueryable Convierte un IEnumerable (genérico) en un IQueryable (genérico). No es aplicable. Queryable.AsQueryable
Conversión de tipos explícita Convierte los elementos de una colección en un tipo especificado. Use una variable de rango con tipo explícito. Por ejemplo:

from string str in words
Enumerable.Cast

Queryable.Cast
OfType Filtra valores en función de su capacidad para convertirse en un tipo especificado. No es aplicable. Enumerable.OfType

Queryable.OfType
ToArray Convierte una colección en una matriz. Este método fuerza la ejecución de la consulta. No es aplicable. Enumerable.ToArray
ToDictionary Coloca elementos en Dictionary<TKey,TValue> basándose en una función de selector de claves. Este método fuerza la ejecución de la consulta. No es aplicable. Enumerable.ToDictionary
ToList Convierte una colección en List<T>. Este método fuerza la ejecución de la consulta. No es aplicable. Enumerable.ToList
ToLookup Coloca elementos en una Lookup<TKey,TElement> (un diccionario uno a varios) basándose en una función de selector de claves. Este método fuerza la ejecución de la consulta. No aplicable. Enumerable.ToLookup

En los ejemplos siguientes de este artículo se usan los orígenes de datos comunes para esta área:

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

Cada Student tiene un nivel académico, un departamento principal y una serie de puntuaciones. Un Teacher también tiene una propiedad City que identifica el campus donde el profesor imparte clases. Un Department tiene un nombre y una referencia a un Teacher que actúa como jefe del departamento.

Ejemplo de sintaxis de expresiones de consulta

En el ejemplo de código siguiente se usa una variable de rango con tipo explícito para convertir un tipo en un subtipo antes de obtener acceso a un miembro que solo está disponible en el 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);
}

La consulta equivalente se puede expresar mediante la sintaxis del método, como se muestra en el ejemplo siguiente:

IEnumerable people = students;

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

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

Consulte también