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>. Los orígenes de datos basados en System.Linq.IQueryProvider usanSystem.Linq.IQueryable<T> orígenes 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:
- El método Enumerable.AsEnumerable puede usarse para ocultar una implementación personalizada de tipo de un operador de consulta estándar.
- El método Enumerable.OfType puede usarse para permitir colecciones no parametrizadas para las consultas LINQ.
- Los métodos Enumerable.ToArray, Enumerable.ToDictionary, Enumerable.ToList y Enumerable.ToLookup pueden usarse para aplicar la ejecución de consultas inmediata en lugar de aplazarla hasta que se enumere la consulta.
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 |
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; }
}
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);
}