martes, 8 de septiembre de 2015

Métodos de extensión

Los métodos de extensión permiten "agregar" métodos a los tipos existentes sin crear un nuevo tipo derivado, recompilar o modificar de otra manera el tipo original. Los métodos de extensión son una clase especial de método estático, pero se les llama como si fueran métodos de instancia en el tipo extendido. En el caso del código de cliente escrito en C# y Visual Basic, no existe ninguna diferencia aparente entre llamar a un método de extensión y llamar a los métodos realmente definidos en un tipo.

Los métodos de extensión más comunes son los operadores de consulta LINQ estándar, que agregan funcionalidad de consulta a los tipos System.Collections.IEnumerable y System.Collections.Generic.IEnumerable<T> existentes. Para usar los operadores de consulta estándar, inclúyalos primero en el ámbito con una directiva using System.Linq. A partir de ese momento, cualquier tipo que implemente IEnumerable<T> parecerá tener métodos de instancia como GroupBy,OrderByAverage, etc. Puede ver estos métodos adicionales en la finalización de instrucciones de IntelliSense al escribir "punto" después de una instancia de un tipo IEnumerable<T>, como List<T> o Array.

Extension utilizando una entidad de EntityFramework.






miércoles, 2 de septiembre de 2015

Lambda Expressions

Una expresión lambda es una función anónima que puede utilizar para crear delegados o árboles expresión tipos.Mediante el uso de las expresiones lambda, puede escribir funciones locales que se pueden pasar como argumentos o devuelven como el valor de las llamadas a funciones. Las expresiones lambda son particularmente útiles para la escritura de expresiones de consulta LINQ.
Para crear una expresión lambda, se especifican los parámetros de entrada (si los hay) en el lado izquierdo del operador lambda =>, y se pone la expresión o bloque de instrucciones en el otro lado. Por ejemplo, la expresión lambda x => x * x especifica un parámetro que se denomina x y devuelve el valor de x al cuadrado.
El operador => tiene la misma precedencia que la asignación (=) y es asociativo a la derecha
Expresión Lambdas 
Una expresión lambda con una expresión en el lado derecho del operador => se denomina lambda expresión.Lambdas de expresión se utilizan ampliamente en la construcción de árboles de expresión. Una expresión lambda devuelve el resultado de la expresión y toma la siguiente forma básica:
(input parameters) => expression

Lambdas con los operadores de consulta estándar
Muchos operadores de consulta estándar tienen un parámetro de entrada cuyo tipo es uno de los Func <T, TResult>familia de delegados genéricos. Estos delegados utilizan parámetros de tipo para definir el número y tipo de parámetros de entrada, y el tipo de retorno del delegado. Func delegados son muy útiles para encapsular expresiones definidas por el usuario que se aplican a cada elemento de un conjunto de datos de origen. Por ejemplo, considere el siguiente tipo de delegado:
public delegate TResult Func<TArg0, TResult>(TArg0 arg0)
El delegado se pueden crear instancias como Func <int, bool> myFunc donde int es un parámetro de entrada y bool es el valor de retorno. El valor de retorno se especifica siempre en el último parámetro de tipo. Func <int, string, bool> define un delegado con dos parámetros de entrada, int y la cadena, y un tipo de retorno de bool. La siguiente delegado Func, cuando se invoca, devolverá verdadero o falso para indicar si el parámetro de entrada es igual a 5:
Func <int, bool> myFunc = x => x == 5;
resultado bool = myFunc (4); // devuelve falso supuesto
Lambdas ejemplo;