Convertir tipos de datos
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 varios sentidos. A continuación se ofrecen algunos ejemplos:
Se puede utilizar el método Enumerable.AsEnumerable<TSource> para ocultar la implementación personalizada de un tipo de un operador de consulta estándar.
El método Enumerable.OfType<TResult> se puede utilizar para habilitar las colecciones no parametrizadas para las consultas LINQ.
Los métodos Enumerable.ToArray<TSource>, Enumerable.ToDictionary, Enumerable.ToList<TSource> y Enumerable.ToLookup se pueden utilizar para forzar la ejecución inmediata de la consulta, en lugar de diferirla hasta su enumeración.
Métodos
En la tabla siguiente se enumeran los métodos de operador de consulta estándar que realizan conversiones de tipos de datos.
Los métodos de conversión de esta tabla cuyo nombre comienza 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 las expresiones de consulta de C# |
Sintaxis de las expresiones de consulta de Visual Basic |
Más información |
---|---|---|---|---|
AsEnumerable |
Devuelve la entrada tipificada como IEnumerable<T>. |
No es aplicable |
No es aplicable |
|
AsQueryable |
Convierte una interfaz IEnumerable (genérica) en una interfaz IQueryable (genérica). |
No es aplicable |
No es aplicable |
|
Conversión de tipos explícita |
Convierte los elementos de una colección a un tipo especificado. |
Utilice una variable de rango con tipo explícito. Por ejemplo: from string str in words |
From … As … |
|
OfType |
Filtra valores en función de si pueden o no convertirse a un tipo especificado. |
No es aplicable |
No es aplicable |
|
ToArray |
Convierte una colección en una matriz. Este método fuerza la ejecución de la consulta. |
No es aplicable |
No es aplicable |
|
ToDictionary |
Coloca los elementos en Dictionary<TKey, TValue> según una función del selector de claves. Este método fuerza la ejecución de la consulta. |
No es aplicable |
No es aplicable |
|
ToList |
Convierte una colección a List<T>. Este método fuerza la ejecución de la consulta. |
No es aplicable |
No es aplicable |
|
ToLookup |
Coloca los elementos en un objeto Lookup<TKey, TElement> (diccionario uno a varios) según una función del selector de claves. Este método fuerza la ejecución de la consulta. |
No es aplicable |
No es aplicable |
Ejemplo de sintaxis de expresiones de consulta
En el ejemplo de código siguiente, se usa una variable de rango tipificada explícitamente (C#) o la cláusula From As (Visual Basic) para convertir un tipo en un subtipo antes de obtener acceso a un miembro que solo está disponible en el subtipo.
Class Plant
Public Property Name As String
End Class
Class CarnivorousPlant
Inherits Plant
Public Property TrapType As String
End Class
Sub Cast()
Dim plants() As Plant = {
New CarnivorousPlant With {.Name = "Venus Fly Trap", .TrapType = "Snap Trap"},
New CarnivorousPlant With {.Name = "Pitcher Plant", .TrapType = "Pitfall Trap"},
New CarnivorousPlant With {.Name = "Sundew", .TrapType = "Flypaper Trap"},
New CarnivorousPlant With {.Name = "Waterwheel Plant", .TrapType = "Snap Trap"}}
Dim query = From plant As CarnivorousPlant In plants
Where plant.TrapType = "Snap Trap"
Select plant
Dim sb As New System.Text.StringBuilder()
For Each plant In query
sb.AppendLine(plant.Name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Venus Fly Trap
' Waterwheel Plant
End Sub
class Plant
{
public string Name { get; set; }
}
class CarnivorousPlant : Plant
{
public string TrapType { get; set; }
}
static void Cast()
{
Plant[] plants = new Plant[] {
new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
};
var query = from CarnivorousPlant cPlant in plants
where cPlant.TrapType == "Snap Trap"
select cPlant;
foreach (Plant plant in query)
Console.WriteLine(plant.Name);
/* This code produces the following output:
Venus Fly Trap
Waterwheel Plant
*/
}
Vea también
Tareas
Cómo: Consultar un objeto ArrayList con LINQ
Referencia
from (Cláusula, Referencia de C#)