LINQ y tipos genéricos

Actualización: noviembre 2007

Las consultas LINQ se basan en tipos genéricos, que se incluyeron por primera vez en la versión 2.0 de .NET Framework. No se requieren conocimientos avanzados de los tipos genéricos para poder empezar a escribir consultas. Sin embargo, quizás necesite conocer dos conceptos básicos:

  1. Al crear una instancia de una clase de colección genérica, como List<T>, la "T" se reemplaza con el tipo de objetos que contendrá la lista. Por ejemplo, una lista de cadenas se expresa como List<string> y una lista de objetos Customer se expresa como List<Customer>. Una lista genérica tiene establecimiento inflexible de tipos y proporciona muchas ventajas frente a las colecciones que almacenan sus elementos como Object. Si intenta agregar Customer a List<string>, obtendrá un error en tiempo de compilación. Es fácil utilizar las colecciones genéricas, porque no es necesario realizar conversiones de tipos en tiempo de ejecución.

  2. IEnumerable<T> es la interfaz que permite enumerar las clases de colección genéricas mediante la instrucción foreach. Las clases de colección genéricas admiten IEnumerable<T> de la misma forma que las clases de colección no genéricas, como ArrayList, admiten IEnumerable.

Para obtener más información acerca de los tipos genéricos, vea Genéricos (Guía de programación de C#).

Variables IEnumerable&lt;T&gt; en consultas LINQ

Las variables de consulta LINQ tienen tipos IEnumerable<T> o un tipo derivado, como IQueryable<T>. Cuando se encuentre una variable de consulta de tipo IEnumerable<Customer>, sólo significa que la consulta, cuando se ejecute, generará una secuencia de cero o más objetos Customer.

IEnumerable<Customer> customerQuery =
    from cust in customers
    where cust.City == "London"
    select cust;

foreach (Customer customer in customerQuery)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

Para obtener más información, consulte Relaciones entre tipos en operaciones de consulta (LINQ).

Permitir al compilador administrar las declaraciones de tipos genéricos

Si lo prefiere, puede evitar la sintaxis genérica con el uso de la palabra clave var. La palabra clave var indica al compilador que deduzca el tipo de una variable de consulta examinando el origen de datos especificado en la cláusula from. En el ejemplo siguiente se genera el mismo código compilado que en el ejemplo anterior:

var customerQuery2 = 
    from cust in customers
    where cust.City == "London"
    select cust;

foreach(var customer in customerQuery2)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

La palabra clave var es útil cuando el tipo de la variable es obvio o cuando no es tan importante especificar explícitamente los tipos genéricos anidados, como los que se generan en las consultas de grupo. Por lo general, si utiliza var, debe saber que puede dificultar la legibilidad del código para los demás. Para obtener más información, consulte Variables locales con asignación implícita de tipos (Guía de programación de C#).

Vea también

Referencia

Genéricos (Guía de programación de C#)

Otros recursos

Introducción a LINQ en C#