Analisis de sitemas

Solo disponible en BuenasTareas
  • Páginas : 5 (1202 palabras )
  • Descarga(s) : 0
  • Publicado : 13 de noviembre de 2010
Leer documento completo
Vista previa del texto
Sintaxis de consultas LINQ y sintaxis de métodos (C#)
Visual Studio 2010
La mayoría de las consultas en la documentación de LINQ de introducción se escriben como expresiones de consulta utilizando la sintaxis de consulta declarativa introducida en C# 3.0.Sin embargo, Common Language Runtime (CLR) de .NET no tiene el concepto de sintaxis de consulta en sí.Por consiguiente, en tiempo decompilación, las expresiones de consulta se convierten en elementos que CLR reconoce, esto es, llamadas a método.Estos métodos se conocen como operadores de consulta estándar y tienen nombres como Where, Select, GroupBy, Join, Max, Average, etc. Se pueden llamar directamente utilizando sintaxis de método en lugar de sintaxis de consulta.
Por lo general, recomendamos la sintaxis de consulta porquenormalmente es más fácil y legible; sin embargo, no hay ninguna diferencia semántica entre la sintaxis de método y la sintaxis de consulta.Además, algunas consultas, como las que recuperan el número de elementos que coinciden con una condición especificada o las que recuperan el elemento que tiene el valor máximo de una secuencia de origen, sólo se pueden expresar como llamadas a método.En la documentaciónde referencia de los operadores de consulta estándar en el espacio de nombres System.Linq generalmente se utiliza la sintaxis de método.Por consiguiente, aunque esté empezando a escribir consultas LINQ, le resultará útil estar familiarizado con el uso de la sintaxis de método en consultas y en expresiones de consulta.

Métodos de extensión de operador de consulta estándar
En el ejemplosiguiente se muestra una expresión de consulta simple y la consulta semánticamente equivalente, escrita como consulta basada en método.

class QueryVMethodSyntax
{
static void Main()
{
int[] numbers = { 5, 10, 8, 3, 6, 12};

//Query syntax:
IEnumerable numQuery1 =
from num in numbers
where num % 2 == 0
orderby numselect num;

//Method syntax:
IEnumerable numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);

foreach (int i in numQuery1)
{
Console.Write(i + " ");
}
Console.WriteLine(System.Environment.NewLine);
foreach (int i in numQuery2)
{
Console.Write(i + " ");
}

// Keepthe console open in debug mode.
Console.WriteLine(System.Environment.NewLine);
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
/*
Output:
6 8 10 12
6 8 10 12
*/

El resultado de los dos ejemplos es idéntico.Puede ver que el tipo de la variable de consulta es el mismo en ambos formatos: IEnumerable.
Para entender la consultabasada en método, examinémosla más de cerca.En el lado derecho de la expresión, observe que la cláusula where se expresa ahora como un método de instancia en el objeto numbers, que, como recordará, es de tipo IEnumerable.Si está familiarizado con la interfaz genérica IEnumerable, sabrá que no tiene un método Where.Sin embargo, si invoca la lista de finalización de IntelliSense en el IDE de VisualStudio, verá no sólo un método Where, sino muchos otros métodos, como Select, SelectMany, Join y Orderby.Éstos son todos los operadores de consulta estándar.
[pic]
Aunque parece que IEnumerable se ha redefinido para incluir estos métodos adicionales, no es así.Los operadores de consulta estándar se implementan como un nuevo tipo de método denominado método de extensión.Los métodos de extensión"extienden" un tipo existente; se pueden llamar como si fueran métodos de instancia en el tipo.Los operadores de consulta estándar extienden IEnumerable y por eso puede escribir numbers.Where(...).
Para empezar a utilizar LINQ, todo lo que realmente tiene que saber sobre los métodos de extensión es cómo incluirlos en el ámbito en su aplicación utilizando las directivas using correctas.Esto se...
tracking img