Compartir a través de


Convertir tipos de datos (C#)

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

Importante

Estos ejemplos usan un origen de datos System.Collections.Generic.IEnumerable<T>. Las fuentes de datos basadas en System.Linq.IQueryProvider usan System.Linq.IQueryable<T> fuentes de datos y árboles de expresión. Los árboles de expresión tienen limitaciones en la sintaxis de C# permitida. Además, cada origen de datos IQueryProvider, como EF Core puede imponer más restricciones. Compruebe la documentación del origen de datos.

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 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 ser convertidos a un tipo especificado. No es aplicable. Enumerable.OfType

Queryable.OfType
ToArray Convierte una colección en un array. Este método fuerza la ejecución de la consulta de base de datos. 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 de base de datos. No es aplicable. Enumerable.ToDictionary
ToList Convierte una colección en List<T>. Este método fuerza la ejecución de la consulta de base de datos. 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 selección de claves. Este método fuerza la ejecución de la consulta de base de datos. No es aplicable. Enumerable.ToLookup

Nota:

En los ejemplos siguientes de este artículo se usan los orígenes de datos comunes para esta área.
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.
Puede encontrar el conjunto de datos de ejemplo en el repositorio de origen.

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:

Puede consultar los orígenes de datos comunes de esta área en el artículo Información general sobre operadores de consulta estándar .

Ejemplo de sintaxis de expresiones de consulta

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

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